2

TableLayoutPanel在 C# (Forms) 中使用。我的桌子很大,有 33 列和 8 行。所有单元格都包含Label-objects。

我已经DoubleBuffered = true;通过创建一个新的子类来设置我的 TableLayoutPanel:

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

如果用户按下按钮 X,则删除所有单元格控件并将其他标签加载到表中(从包含所有 Label 对象的数组)。

删除:this.table.Controls.Remove(this.table.GetControlFromPosition(col, row));

添加:this.table.Controls.Add(this.labelArray[row, (col+pos)], col, row);

一切正常,除了删除控件和添加新控件的过程需要五到十秒钟。

除了设置DoubleBuffered = true以加快此过程之外,还有其他方法吗?

4

4 回答 4

2

使用此代码可以避免 C# 中的事件处理缓慢

tableLayoutPanel1.Visible = false;
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.SuspendLayout();

  // Processing Code

tableLayoutPanel1.ResumeLayout();
tableLayoutPanel1.Visible = true;
于 2016-09-28T11:32:14.603 回答
1

试试这个代码

TableLayoutPanel.GetType().GetProperty("DoubleBuffered",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
                .SetValue(TableLayoutPanel, true, null);
于 2020-09-24T02:13:16.020 回答
0

我可能错了,但这听起来像是为这些任务优化的数据网格视图的工作。

于 2013-09-19T12:17:30.023 回答
0

每次执行操作(回发)时,您是否从数据库中获取数据以填充 tablelayoutpanel?

如果是这样,请考虑在页面首次加载时将数据延迟加载到可绑定对象中。然后在重新绑定时使用填充的对象(在回发上)。

于 2013-09-19T12:20:27.483 回答