使用 TableLayoutPanel 时,我面临着令人讨厌的性能问题。我有一个带有 RadioButton 和 LinkLabel 的简单用户控件。LinkLabel 的文本是动态的,因此整个控件的 AutoSize 属性设置为 true。
现在我有一个面板,其中 AutoScroll 设置为 true,TableLayoutPanel 自动调整大小,里面有 2 列。此 TableLayoutPanel 填充了上述用户控件:
private void PopulateLocationItemsTable(Control[] Controls)
{
//Suspend outher Panel and set AutoScroll to false just in case.
panelLocationItemsTableCountainer.SuspendLayout();
panelLocationItemsTableCountainer.AutoScroll = false;
//Suspend TableLayoutPanel
tableLocationItems.SuspendLayout();
Controls = Controls.OrderBy(c => c.Text).ToArray();
//Populate left column
int verticalPosition = 3;
int leftColumnControlsNumber = Controls.Length / 2;
for (int i = 0; i < leftColumnControlsNumber; i++)
{
tableLocationItems.Controls.Add(Controls[i], 0,0);
Controls[i].Location = new Point(10, verticalPosition);
verticalPosition += 17;
}
//Populate right column
verticalPosition = 3;
for (int i = leftColumnControlsNumber; i < Controls.Length; i++)
{
tableLocationItems.Controls.Add(Controls[i], 0, 1);
Controls[i].Location = new Point(10, verticalPosition);
verticalPosition += 17;
}
//Resume TableLayoutPanel
tableLocationItems.ResumeLayout(true);
//And restore outher Panel state
panelLocationItemsTableCountainer.AutoScroll = true;
panelLocationItemsTableCountainer.ResumeLayout(true);
}
问题是用户控件最初填充在 FormLoad 事件中,并且 Form 在实际出现之前只挂起大约 10 秒。这对我来说是完全不能接受的。
如果我将用户控件的 AutoSize 属性设置为 false,此问题就会消失。我还尝试将用户控件直接放在外部面板上,它也可以正常工作。问题出在 TableLayoutPanel 上。有没有人遇到过这样的问题并找到了解决方案?当然,我可以将我的用户控件直接放置在计算正确坐标的面板上,但使用 TableLayoutPanel 是此类任务的“正确”方式。