我在使用TableLayoutPanel時遇到了令人討厭的性能問題。我有一個簡單的用戶控件與RadioButton和LinkLabel。 LinkLabel的文本是動態的,因此整個控件都將AutoSize屬性設置爲true。帶嵌套自動化用戶控件性能問題的TableLayoutPanel
現在我有一個Panel,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是這種任務的「正確」方法。
感謝您的回覆。閱讀完後,我想出瞭解決這個問題的方法。不優雅,但工作得很快。由於我的窗體具有靜態寬度,我實際上並不需要內部用戶控件的自動大小。我可以將它們的寬度設置爲匹配TableLayoutPanel列的完整寬度。當內部用戶控件具有固定寬度時,此性能問題將消失。謝謝。 – Shoar 2013-04-11 16:29:26