我在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
以加快此过程之外,还有其他方法吗?
答案 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);