2017-01-11 8 views
1

Может кто-нибудь объяснить, почему приведенный ниже код оставляет белые пробелы между вставленными элементами и как их исправить?Панель AutoScrollPosition оставляет белые пробелы между элементами

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


      })); 
     } 
    } 

ответ

1

Поскольку вы не используете FlowLayoutPanel, вы должны компенсировать положение полосы прокрутки для того, чтобы получить правильное расположение:

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

Вы, вероятно, следует положить все кода создания этого GUI-кода внутри этого блока BeginInvoke. Элементы управления графическим интерфейсом могут быть созданы в потоке графического интерфейса пользователя.

+0

Отличный материал. Большое спасибо!! –