加速控件的启用/禁用(C#WinForms)

Mad*_*ine 3 .net c#

我在基本表单上有一个递归方法,它接受一个控件和一个启用标志.它遍历表单上的每个控件,并根据控件类型,相应地设置控件的背景颜色,并将enabled属性设置为参数.

所以通常,该方法被称为传递(this)作为控件,它遍历所有控件及其控件并相应地设置事物.这已经工作正常但是表单已经添加了越来越多的控件,你实际上可以看到控件一个接一个地禁用它看起来并不好看.

有没有人知道如何重写或阻止它逐一显示每个控件的禁用过程?像SuspendLayout这样的东西会在这种情况下起作用吗?它不是一个选项,可以在表单中添加一个面板,只是禁用它并在最后重新启用它,因为我有大约200个表单继承自这个基本表单,并且不能通过每个表单并强制它将控件添加到面板.这也行不通,因为它不仅可以启用/禁用控件,还可以应用其他逻辑.

Meh*_*ari 7

将修改包含在:

form.SuspendLayout();
Run Code Online (Sandbox Code Playgroud)

form.ResumeLayout(false); // read the doc about "false", might be a little unsafe
Run Code Online (Sandbox Code Playgroud)

此外,遍历控制层次结构可能非常耗时.你可以这样做一次并将它们缓存在一个列表中,然后在那之后引用该列表.

  • 我不确定.你可能是对的,但无论如何,你在问题中说:"它不仅仅是启用/禁用控件,而是应用其他逻辑." 如果你只处理20/30控件,我猜你的问题是在控制树中搜索它们.难道你不能只将它们缓存在一个数组中并使用缓存列表吗? (3认同)