c# - 将 ~280 个控件从 visible=true 更改为 visible=false 大约需要 8-9 秒(太长)

标签 c# .net winforms

我想知道我是否可以做些什么来加快速度,我已经将时间延迟缩小到下面这部分代码。我想知道是否还有其他方法可以使它至少快 2-3 倍。

form1.SuspendLayout();
foreach (KeyValuePair<Control, bool> i in ItemControlUpdates)
{
    i.Key.Visible = i.Value;
}
form1.ResumeLayout();

编辑: 谢谢你们的评论,我更正了我的代码,希望它能指出我的具体问题。 (我不需要写入文件)

编辑2: 280 个控件是用户控件,我的应用程序要求在进行排序选择时查看全部或部分控件。

编辑3: 答案是:必须在父级上调用 SuspendLayout() 才能有效,当我需要在控件所在的面板上使用它时,我在表单上错误地使用了它。

最佳答案

问题在于控件嵌入在面板中,并且将 form1.SuspendLayout() 与 panel.SuspendLayout() 进行交换使得此操作根本不需要时间。有几个人暗示过这一点,我建议人们查看 stakx 答案,因为它包含针对与此类似问题的其他/类似可能解决方案。

这是很好用的固定代码:

                cPanel.SuspendLayout();
                foreach (KeyValuePair<Control, bool> i in ItemControlUpdates)
                {
                    i.Key.Visible = i.Value;
                }
                cPanel.ResumeLayout();

关于c# - 将 ~280 个控件从 visible=true 更改为 visible=false 大约需要 8-9 秒(太长),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27120723/

相关文章:

c# - 在表达式树中访问子(列表)相关属性

c# - 我知道我做错了验证。请劝我停止 :)

c# - Parallel.Foreach 被卡住,但服务继续响应

c# - 为什么 Database.Log 不是一个事件?

c# - 使用 BouncyCaSTLe 签署 X509 证书 - 无效的数字签名

c# - 使用 OAuth 连接到 Windows Azure Active Directory

c# - 关键字 'Transaction' 附近的语法不正确

.net - Winforms 无法在 VS2012 中加载文件或程序集 'Microsoft.ReportDesigner, Version=10.0.0.0'

c# - Masked TextBox 如何不在文本框中显示下划线并允许用户输入 3 位数字

c# - 如果仅选择了部分行,如何获取所有选定的行?