如何在表单上启用所有控件?

Joh*_*ith 6 c# loops winforms

目前我在启动时禁用了大部分表单的控件,因为在加载文件之前无法使用它们.但是,一旦加载文件,控件应该启用.

我正在使用绑定,但我不认为它们是一个很好的解决方案.首先,它是不必要的复杂性.其次,你不能使用绑定的一切.例如,MenuStrip项不能将其Enabled属性绑定到fileLoaded属性.只有整个菜单可以,我不想在启动时禁用整个菜单,只需要对文件进行操作的某些菜单操作.

我真的只是想找到一种方法来实现一切.大多数人被问到会回答这个:

foreach (Control c in Controls)
{
    c.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于在其他控件(如Panel或自定义控件)中启用MenuStrip项或控件.因此,它不会在容器中启用滚动条.

我想我可以使用该行并手动启用其他所有内容,但我总是可以手动启用所有内容.我正在寻找一种自动启用一切的方法.

msa*_*het 12

递归

private void enableControls(Control.ControlCollection Controls)
{
    foreach (Control c in Controls)
    {
        c.Enabled = true;
        if (c is MenuStrip)
        {
           foreach(var item in ((MenuStrip)c).Items)
           { 
              item.Enabled = true;
           }
        }
        if (c.ControlCollection.Count > 0)
            enableControls(c.Controls);

    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

本来应该检查控件收集计数而不是HasControls哪个是Webcontrols


ica*_*tan 6

将所有控件放在面板中;

panel.enable = false - >面板中的所有控件都将被禁用panel.enable = true - >面板中的所有控件都将被启用(如果它们处于默认启用状态,很快就会使用启用的控件填充面板,让面板禁用因此,您的控件也将被禁用.启用面板后,您的控件将被启用)