2014-05-03 15 views
6

Ich habe viele Schaltflächen auf Flowlayoutpanel, und dann gibt es Textbeschriftungen, um den Fluss zu brechen. Letzte Taste vor Label und Label selbst hat SetFlowBreak. Alles funktioniert gut, aber was ich nicht verstehe ist, warum es so viel Platz unter dem Label gibt? Wenn die Größe des Formulars so klein ist, dass es nur eine Spalte mit Schaltflächen gibt, verschwindet der unerwünschte Bereich. Kann jemand erklären, wie dieser Raum entfernt werden kann?Seltsame Leerzeichen in FlowLayoutPanel

Code:

public Form1() 
{ 
    InitializeComponent(); 

    for (int i = 1; i <= 100; i++) 
    { 
     Button button = new Button(); 
     button.Text = i.ToString(); 
     button.Width = 150; 
     button.Height = 50; 
     button.Margin = new Padding(5); 
     flowLayoutPanel1.Controls.Add(button); 

     if (i % 10 == 0) 
     { 
      flowLayoutPanel1.SetFlowBreak(button, true); 

      Label label = new Label(); 
      label.Text = "Some random text"; 
      label.AutoSize = true; 
      label.Margin = new Padding(5, 5, 0, 0); 
      label.BackColor = ColorTranslator.FromHtml("#ccc"); 
      flowLayoutPanel1.Controls.Add(label); 

      flowLayoutPanel1.SetFlowBreak(label, true); 

     } 
    } 
} 

und ein paar Bilder zu zeigen, was ich meine:

Image1: Strange space under the Label enter image description here

Image2: No space under the Label when the form is resized (this is how I'd like this to work) enter image description here

+0

Eigentlich der Raum unter dem Etikett verschwindet nur, wenn Sie wirklich nahe kommen; Ich kann es vorher sehen, obwohl es nur eine Spalte von Tasten gibt. – TaW

+0

Sie haben Recht. Das habe ich vorher nicht bemerkt. – darx

+0

Nicht das hilft - sieht aus wie ein Fehler .. – TaW

Antwort

4

Danke Hans! Ich denke, das ist eine echte Antwort, da es mein Problem gelöst hat: (Zitat von Kommentaren)

Es ist ein Fehler, der gleiche as this one. Der zusätzliche Platz ist die Höhe des nächsten Etiketts. Die Problemumgehung ist genau die gleiche, fügen Sie einfach ein Dummy-Steuerelement mit einer Breite von 0 nach dem Label hinzu. - Hans Passant

Also zuerst entfernte ich flowbreak nach dem echten Label:

flowLayoutPanel1.SetFlowBreak(label, true); 

Und dann ersetzt es durch den folgenden Code, und der geheimnisvolle Raum verschwunden!

Label dummyLabel = new Label(); 
dummyLabel.Width = 0; 
dummyLabel.Height = 0; 
dummyLabel.Margin = new Padding(0, 0, 0, 0); 

flowLayoutPanel1.Controls.Add(dummyLabel); 
flowLayoutPanel1.SetFlowBreak(dummyLabel, true); 

Fixed

+0

Willkommen bei SO. +1 für die Antwort auf Ihre Frage. Ich würde empfehlen, es auch zu akzeptieren ... –

+1

Danke. Ich werde, aber SO würde ich es bis morgen nicht akzeptieren lassen. – darx