我在C# (表单)中使用TableLayoutPanel。我的表非常大,有33列和8行。所有单元格都包含Label-objects。
我已经通过创建一个新的子类设置了我的TableLayoutPanel的DoubleBuffered = true;:
public class DoubleBufferedTableLayoutPanel : TableLayoutPanel
{
public DoubleBufferedTableLayoutPanel()
{
DoubleBuffered = true;
}
}如果用户按下按钮X,则删除所有单元格控件,并将其他标签加载到表中(从包含所有标签对象的数组中)。
DEL:this.table.Controls.Remove(this.table.GetControlFromPosition(col, row));
添加:this.table.Controls.Add(this.labelArray[row, (col+pos)], col, row);
一切正常,除了删除控件和添加新控件的过程需要5到10秒。
除了设置DoubleBuffered = true之外,还有没有其他方法来加速这个过程?
发布于 2016-09-28 19:32:15
使用此代码可避免在C#中处理事件的速度较慢
tableLayoutPanel1.Visible = false;
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.SuspendLayout();
// Processing Code
tableLayoutPanel1.ResumeLayout();
tableLayoutPanel1.Visible = true;发布于 2013-09-19 20:17:30
我可能错了,但这听起来像是一个datagridview的工作,它针对这些任务进行了优化。
发布于 2013-09-19 20:20:27
您是否每次执行操作(回发)时都从数据库获取数据以填充tablelayoutpanel?
如果是这样,请考虑在页面首次加载时将数据延迟加载到可绑定对象中一次。然后在重新绑定时使用填充的对象(在回发时)。
https://stackoverflow.com/questions/18894361
复制相似问题