动态创建"表格布局面板"花费的时间太长
本文关键字:quot 时间 创建 表格 布局 动态 | 更新日期: 2023-09-27 18:00:59
我正在C#中开发一个WinForms应用程序。我最初有一个表格布局面板,我用动态创建的按钮填充,每个单元格一个按钮。这很有效,而且速度很快。在程序执行过程中,我必须清除这个"表格布局面板"并重新填充它,几乎使用相同的显示,但有更多的按钮(是初始表格的两倍(。问题是这个过程需要很多时间(超过10秒(。我做错什么了吗?这是代码:
buttonTable.Controls.Clear();
buttonTable.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
buttonTable.RowCount = GetNoOfLines();
buttonTable.ColumnCount = GetNoOfLines();
for (int z = 1; z <= GetNoOfLines(); z++)
{
buttonTable.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 25));
buttonTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 25));
}
for (int i = 1; i <= GetNoOfLines(); i++)
{
for (int j = 1; j <= GetNoOfLines(); j++)
{
FieldButton tempButton = new FieldButton(i, j, GetNoOfLines());
tempButton.MouseDown += new MouseEventHandler(OnFieldButtonClicked);
buttonTable.Controls.Add(tempButton, j - 1, i - 1);
}
}
注意:FieldButton
是从Button
派生的类,我在其中添加了两个int's
,没有什么特别之处。此外,按钮也正确地添加到了表中。谢谢
我在TableLayoutPanel性能方面遇到了问题,直到我读取了这个线程并创建了一个自定义控件来设置DoubleBuffered属性。
public class DoubleBufferedTableLayoutPanel :TableLayoutPanel
{
public DoubleBufferedTableLayoutPanel()
{
DoubleBuffered = true;
}
}
请尝试该控件,而不是标准的TableLayoutPanel。我赞同在填充表格时暂停并恢复布局的建议。
将buttonTable从表单中分离出来,并在添加完控件后立即附加。这样做效果很好。
尝试在代码添加按钮之前和之后使用SuspendLayout()
和ResumeLayout()
,以减少重新绘制按钮所需的时间。这将在一段时间内减少