Panel AutoScrollPosition 在元素之间留下空白
Panel AutoScrollPosition leaves white spaces between elements
有人可以解释为什么下面的代码在插入的元素之间留下空白以及如何解决这个问题吗?
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);
}));
}
}
由于您没有使用 FlowLayoutPanel,因此您必须补偿滚动条的位置才能获得正确的位置:
TestLBL.Location = new Point(10, panel1.AutoScrollPosition.Y + panel1.Controls.Count * 20);
您可能应该将所有 GUI 控件创建代码放在 BeginInvoke 块中。 GUI 控件喜欢在 GUI 线程上创建。
有人可以解释为什么下面的代码在插入的元素之间留下空白以及如何解决这个问题吗?
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);
}));
}
}
由于您没有使用 FlowLayoutPanel,因此您必须补偿滚动条的位置才能获得正确的位置:
TestLBL.Location = new Point(10, panel1.AutoScrollPosition.Y + panel1.Controls.Count * 20);
您可能应该将所有 GUI 控件创建代码放在 BeginInvoke 块中。 GUI 控件喜欢在 GUI 线程上创建。