动态创建"表格布局面板"花费的时间太长

本文关键字: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(),以减少重新绘制按钮所需的时间。这将在一段时间内减少