簡體   English   中英

TableLayoutPanel 非常慢

[英]TableLayoutPanel extremely slow

我在 C#(表單)中使用TableLayoutPanel 我的表很大,有 33 列和 8 行。 所有單元格都包含Label對象。

我已經設置了DoubleBuffered = true; 通過創建一個新的子類來更改我的 TableLayoutPanel:

public class DoubleBufferedTableLayoutPanel : TableLayoutPanel
{
    public DoubleBufferedTableLayoutPanel()
    {
        DoubleBuffered = true;
    }
}

如果用戶按下按鈕 X,將刪除所有單元格控件,並將其他標簽加載到表格中(來自包含所有 Label 對象的數組)。

DEL: this.table.Controls.Remove(this.table.GetControlFromPosition(col, row));

添加: this.table.Controls.Add(this.labelArray[row, (col+pos)], col, row);

一切正常,只是刪除控件和添加新控件的過程需要五到十秒鍾。

除了設置DoubleBuffered = true之外,還有其他方法可以加快此過程嗎?

使用此代碼可避免 C# 中事件處理緩慢

tableLayoutPanel1.Visible = false;
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.SuspendLayout();

  // Processing Code

tableLayoutPanel1.ResumeLayout();
tableLayoutPanel1.Visible = true;

我可能錯了,但這聽起來像是針對這些任務優化的 datagridview 的工作。

每次執行操作(回發)時,您是否都從數據庫獲取數據以填充 tablelayoutpanel?

如果是這樣,請考慮在頁面首次加載時將數據延遲加載到可綁定對象中。 然后在重新綁定時使用填充的對象(在回發時)。

試試這個代碼

TableLayoutPanel.GetType().GetProperty("DoubleBuffered",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
                .SetValue(TableLayoutPanel, true, null);

暫無
暫無

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

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