当前,我在启动时禁用了大多数窗体控件,因为在加载文件之前您无法使用它们。但是,一旦文件被加载,控件应被启用。

我使用绑定(bind),但是我认为它们不是一个好的解决方案。首先,这是不必要的复杂性。其次,您不能对所有内容都使用绑定(bind)。例如,MenuStrip项不能将其Enabled属性绑定(bind)到fileLoaded属性。只有整个菜单可以并且我不想在启动时禁用整个菜单,只有某些对文件进行操作的菜单操作才可以。

我真的只是在寻找一种启用所有功能的方法。大多数人被问到会回答以下问题:

foreach (Control c in Controls)
{
    c.Enabled = true;
}

但是,这对于启用MenuStrip项或其他控件(例如面板或自定义控件)中的控件不起作用。因此,它将不会在容器内启用滚动条。

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

最佳答案

递归

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);

    }
}

编辑

应该一直在检查控件集合计数,而不是WebControl的HasControls

关于c# - 如何在窗体上启用所有控件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7182821/

10-13 06:25