我想知道我是否可以做些什么来加快这个速度,我缩短了下面这部分代码的时滞。我想知道是否还有其他事情可以让它至少快2-3倍。
form1.SuspendLayout();
foreach (KeyValuePair<Control, bool> i in ItemControlUpdates)
{
i.Key.Visible = i.Value;
}
form1.ResumeLayout();
编辑: 谢谢你们的评论,我纠正了我的代码并希望它表明我的具体问题。 (我不需要写文件)
EDIT2: 280控件是用户控件,我的应用程序要求在进行排序选择时查看所有这些控件或其中一些。
EDIT3: 答案是:必须在父级上调用SuspendLayout()才能生效,当我需要在控件所在的面板上使用它时,我在表单上错误地使用了它。
答案 0 :(得分:3)
The fact is(正如this comment above中所述)操纵如此多的(280)控件必然会很慢,因为Windows Forms不是超快的。由于您还没有详细说明表单的结构和布局,我只能给您一些通用的建议:
如果您正在操作的某些控件实际上未嵌入form1
,则form1.SuspendLayout()
对这些控件无效。暂停所有相关表格的布局。
您可以尝试将逻辑上属于一起的一些控件分组到一个用户控件中,或者至少分组到Panel
;然后,您只能使该容器控件可见或不可见。特别是当您使用AutoSize
等布局功能时,这可能意味着Windows窗体必须进行更少的布局计算。
大幅减少表单上的控件总数。很可能是因为有这么多控件,你的表单从用户体验(UX)的角度来看太复杂了:你一次向用户提出太多要求,而你的表单可能最终会让人感到困惑甚至无法使用。考虑重新设计表单。如果工作流真的那么复杂,你至少可以把它分成一系列简单的步骤 - 想想向导/多步对话。
答案 1 :(得分:3)
问题在于控件嵌入到面板中并与panel.SuspendLayout()交换form1.SuspendLayout()使得此操作完全没有时间。有几个人暗示这一点,我建议人们查看stakx答案,因为它包含其他/类似可能的解决方案,以解决与此类似的问题。
以下是可行的固定代码:
cPanel.SuspendLayout();
foreach (KeyValuePair<Control, bool> i in ItemControlUpdates)
{
i.Key.Visible = i.Value;
}
cPanel.ResumeLayout();