Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TableLayoutPanel非常慢_C#_Tablelayoutpanel - Fatal编程技术网

C# TableLayoutPanel非常慢

C# TableLayoutPanel非常慢,c#,tablelayoutpanel,C#,Tablelayoutpanel,我正在C#(表单)中使用TableLayoutPanel。 我的桌子很大,有33列8行。所有单元格都包含标签-对象 我已经设置了DoubleBuffered=true: public class DoubleBufferedTableLayoutPanel : TableLayoutPanel { public DoubleBufferedTableLayoutPanel() { DoubleBuffered = true; } } 如果用户按下按钮X,

我正在C#(表单)中使用
TableLayoutPanel
。 我的桌子很大,有33列8行。所有单元格都包含
标签
-对象

我已经设置了
DoubleBuffered=true

public class DoubleBufferedTableLayoutPanel : TableLayoutPanel
{
    public DoubleBufferedTableLayoutPanel()
    {
        DoubleBuffered = true;
    }
}
如果用户按下按钮X,则删除所有单元格控件,并将其他标签加载到表中(从包含所有标签对象的数组中)

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

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

除了删除控件和添加新控件的过程需要5到10秒外,所有操作都很正常


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

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

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

如果是,请考虑在页面首次加载时将数据加载到可绑定对象中一次。


然后在重新绑定(回发时)时使用填充的对象。

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

试试这个代码

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

您正在使用线程吗?您是否尝试过在
SuspendLayout
&
resumellayout
调用之间嵌入
Add
/
Remove
调用?@LokiSinclair在填充表格时没有。。。我如何最好地实现这一点?创建两个线程,这两个线程都填满了表的一半?@olydis没有,但会尝试正确的方法now@olydis+1现在速度更快了,但仍然有相当长的延迟(几秒钟…)没有;程序启动,面板初始化,数组创建。这个数组只填充了一次-以后任何时候都不会更改…你想解释一下为什么你投了反对票还是无缘无故地随机填充?你的回答帮助我解决了一个类似的问题…感谢我用数据填充了一个tableLayoutPanel,它非常慢…在更改为datagridView后,填充数据需要6秒钟,这是非常简单的太好了,如果你不确定,我建议你不要发布答案,或者你可以将其作为评论发布。。。没人能否决评论你能解释一下这到底是怎么回事吗?嗨,汉堡包杰克,欢迎来到StackOverflow。谢谢你的回答。如果您的答案提供更多关于OP示例中的错误以及您的答案如何修复的信息,堆栈溢出社区将受益更多,而不仅仅是“技术性”的复制和粘贴。阅读本文的人希望看到您的见解,而不仅仅是最终的代码。JimbobI认为这只是我的编码风格,使用GetProperty获取“DoubleBuffered”属性,从而修改TableLayoutPanel中的DoubleBuffered,我确信这是有用的
TableLayoutPanel.GetType().GetProperty("DoubleBuffered",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
                .SetValue(TableLayoutPanel, true, null);