TableLayoutPanel极其缓慢

时间:2013-09-19 12:14:39

标签: c# tablelayoutpanel

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

我已经通过创建一个新的子类设置了我的TableLayoutPanel的DoubleBuffered = true;

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

如果用户按下按钮X,则删除所有单元格控件,并将其他标签加载到表格中(从包含所有Label对象的数组中)。

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

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

一切正常,但删除控件和添加新控件的进度需要5到10秒。

除了设置DoubleBuffered = true以加快此过程之外,还有其他方法吗?

4 个答案:

答案 0 :(得分:0)

我可能错了,但这听起来像是数据网格视图的工作,它针对这些任务进行了优化。

答案 1 :(得分:0)

每次执行操作(回发)时,是否从数据库获取数据以填充tablelayoutpanel?

如果是这样,请考虑在首次加载页面时将数据延迟加载到可绑定对象中。 然后在重新绑定时使用填充的对象(在Postback上)。

答案 2 :(得分:0)

使用此代码可避免在C#

中缓慢处理事件
tableLayoutPanel1.Visible = false;
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.SuspendLayout();

  // Processing Code

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

答案 3 :(得分:0)

尝试此代码

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