动态创建表格布局面板需要太长时间

时间:2011-07-01 19:28:00

标签: c# winforms

我正在使用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,没有什么特别之处。此外,按钮正确添加到表中。谢谢!

3 个答案:

答案 0 :(得分:6)

在我阅读this thread并创建了一个设置DoubleBuffered属性的自定义控件之前,我遇到了TableLayoutPanel性能问题。

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

尝试使用该控件而不是标准的TableLayoutPanel。当你填充表格时,我会建议暂停和恢复布局。

答案 1 :(得分:2)

从表单中分离buttonTable并在完成向其添加控件后附加。这样做很好。

答案 2 :(得分:0)

在代码添加按钮之前和之后尝试使用SuspendLayout()ResumeLayout(),以减少重新绘制按钮所需的时间。这应该会减少一些时间