2017-01-11 3 views
1

Quelqu'un peut-il expliquer pourquoi le code ci-dessous laisse des espaces entre les éléments insérés et comment le réparer?Panel AutoScrollPosition laisse des espaces blancs entre les éléments

enter image description here

private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
    { 
     if (outLine.Data != null && !String.IsNullOrWhiteSpace(outLine.Data)) 
     { 
      this.lineCount++; 
      Label TestLBL = new Label(); 
      TestLBL.Text = outLine.Data.TrimStart(); 
      TestLBL.Name = this.lineCount.ToString(); 
      TestLBL.AutoSize = true; 
      TestLBL.Location = new Point(10, panel1.Controls.Count * 20); 

      BeginInvoke(new MethodInvoker(() => 
      { 
       panel1.Controls.Add(TestLBL); 
       panel1.AutoScrollPosition = new Point(10, this.lineCount * 20); 


      })); 
     } 
    } 

Répondre

1

Puisque vous n'utilisez pas FlowLayoutPanel, vous devez compenser la position de la barre de défilement afin d'obtenir l'emplacement correct:

TestLBL.Location = new Point(10, panel1.AutoScrollPosition.Y + panel1.Controls.Count * 20); 

Vous devriez probablement mettre tous de ce code de création de contrôle GUI à l'intérieur de ce bloc BeginInvoke. Les contrôles de GUI aiment être créés sur le fil GUI.

+0

De bonnes choses. Merci beaucoup!! –