当前,我在启动时禁用了大多数窗体控件,因为在加载文件之前您无法使用它们。但是,一旦文件被加载,控件应被启用。
我使用绑定(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/