繁体   English   中英

TableLayoutPanel 非常慢

[英]TableLayoutPanel extremely slow

我在 C#(表单)中使用TableLayoutPanel 我的表很大,有 33 列和 8 行。 所有单元格都包含Label对象。

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

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

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

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

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

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

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

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

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

  // Processing Code

tableLayoutPanel1.ResumeLayout();
tableLayoutPanel1.Visible = true;

我可能错了,但这听起来像是针对这些任务优化的 datagridview 的工作。

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

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

试试这个代码

TableLayoutPanel.GetType().GetProperty("DoubleBuffered",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
                .SetValue(TableLayoutPanel, true, null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM