簡體   English   中英

具有嵌套自動大小調整的用戶的TableLayoutPanel控件性能問題

[英]TableLayoutPanel with nested autosized user controls performance issue

使用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是執行此類任務的“正確”方法。

使用TableLayoutPanel是正確的方法,但是您需要將該控件中的列視為靜態寬度。 我在一個應用程序中使用該面板遇到了幾乎完全相同的問題,並且意識到我只是在錯誤地看待它。

如果有兩列,而我的容器(例如表單)的寬度為300像素,則每列的寬度為150像素(減去填充和填充),因此這些列中的控件必須起作用而不是列起作用。

您真正需要以這種方式查看它的另一個原因是,因為引擎沒有像在WPF框架中那樣首先在內存中布局所有內容,因此它的核心效率極高,因為它可以立即提交更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM