C# 启用面板上的所有控件

C# 启用面板上的所有控件,c#,winforms,C#,Winforms,我想启用面板上的所有控件。我可以像下面那样在面板中循环。 不过,这并没有触及所有组件,只触及顶级组件。 我该怎么做?() 您只需将面板的Enabled属性设置为true或false 从属性上的MSDN页面: 当容器控件的enabled属性设置为false时,其包含的所有控件也将被禁用。例如,如果用户单击禁用的GroupBox控件中包含的任何控件,则不会引发任何事件 但是,如果您选择使用递归方法,下面是如何编写它: void SetEnabledAllChildrenOf(Control cont

我想启用面板上的所有控件。我可以像下面那样在面板中循环。 不过,这并没有触及所有组件,只触及顶级组件。 我该怎么做?()


您只需将面板的
Enabled
属性设置为
true
false

从属性上的MSDN页面:

当容器控件的enabled属性设置为false时,其包含的所有控件也将被禁用。例如,如果用户单击禁用的GroupBox控件中包含的任何控件,则不会引发任何事件

但是,如果您选择使用递归方法,下面是如何编写它:

void SetEnabledAllChildrenOf(Control control, bool enabled)
{
    control.Enabled = enabled;
    foreach(Control c in control.Controls)
    {
        SetEnabledAllChildrenOf(c, enabled);
    }
}

你需要让它递归。我试过了,但没走多远。输入参数为的类是什么?使用基本
控件
类。我很确定您只需要执行
Panel.Enabled=true
,它将自动启用/禁用所有子控件。您不需要手动启用/禁用所有子项。感谢您的回复,看起来像这样的解决方案。我遇到了一些困难,可能与将面板启用属性设置为true时遇到的困难相同。。。ToolsStrip上的按钮(即项目)似乎不是子控件。@AlLelopath我无法帮助处理看不见的代码。如果您可以在包含设计器生成的代码的include中编辑您的问题,那么可能有人可以帮助您。该代码是上面的递归方法。当它到达面板上的ToolStrip时,它认为ToolStrip没有任何子对象,所以可以说递归停止了。我在原始问题中添加了将项添加到ToolStrip的代码。ToolStrip项属于
属性,因为它们不继承
控件
不能作为
控件
引用。但是,一旦将
ToolStrip
Enabled
属性设置为
false
,它的所有项目都应该被禁用。
this.toolStripContractor.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbContractor_AddFile,
this.tsbContractor_View,
this.tsbContractor_Delete});
void SetEnabledAllChildrenOf(Control control, bool enabled)
{
    control.Enabled = enabled;
    foreach(Control c in control.Controls)
    {
        SetEnabledAllChildrenOf(c, enabled);
    }
}