2014-05-03 28 views
6

Ho molti pulsanti sul pannello di visualizzazione dei flussi e poi ci sono etichette di testo per interrompere il flusso. Ultimo pulsante prima dell'etichetta e dell'etichetta stessa è SetFlowBreak. Tutto funziona bene, ma quello che non capisco, è perché c'è così tanto spazio sotto l'etichetta di testo? Se la forma viene ridimensionata in modo così stretto che c'è solo una colonna di pulsanti, lo spazio indesiderato scompare. Qualcuno può spiegare come rimuovere lo spazio?Strani spazi vuoti in FlowLayoutPanel

Codice:

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); 

     } 
    } 
} 

e un paio di immagini per mostrare cosa intendo:

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

In realtà lo spazio sottostante l'etichetta scompare solo quando si arriva davvero vicino; Posso vederlo prima, anche se c'è una sola colonna di pulsanti. – TaW

+0

Hai ragione. Non me ne sono accorto prima. – darx

+0

Non che questo aiuti - sembra un insetto .. – TaW

risposta

4

Grazie Hans! Penso che questa sia una risposta reale, in quanto ha risolto il mio problema: (citazione dai commenti)

Si tratta di un bug, lo stesso as this one. Lo spazio extra è l'altezza dell'etichetta successiva. La soluzione alternativa è esattamente la stessa, basta aggiungere un controllo fittizio con una larghezza di 0 dopo l'etichetta. - Hans Passant

Quindi, prima ho tolto flowbreak dopo l'etichetta reale:

flowLayoutPanel1.SetFlowBreak(label, true); 

E poi lo ha sostituito con il seguente codice, e lo spazio misterioso scomparso!

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

Benvenuti in SO. +1 per pubblicare la risposta alla tua domanda. Vorrei raccomandare di accettarlo così ... –

+1

Grazie. Lo farò, ma SO mi permetterebbe di accettarlo fino a domani. – darx

Problemi correlati