启用Panel上的所有控件

Al *_*ath -1 c# winforms

我想启用Panel上的所有控件.我可以像下面一样遍历Panel.这并不触及所有组件,只是顶级组件.我该怎么做呢?(这不是答案)

private void LoopThroughAllControls(System.Windows.Forms.Panel panel)
{
    for (int i = 0; i < panel.Controls.Count; i++)
    {
        panel.Controls[i].Enabled = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

ToolStrip添加ToolStripButton项目的代码:

this.toolStripContractor.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbContractor_AddFile,
this.tsbContractor_View,
this.tsbContractor_Delete});
Run Code Online (Sandbox Code Playgroud)

Zoh*_*led 5

您所要做的就是将Panel的Enabled属性设置为truefalse.

从MSDN的Enabled财产页面:

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

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

void SetEnabledAllChildrenOf(Control control, bool enabled)
{
    control.Enabled = enabled;
    foreach(Control c in control.Controls)
    {
        SetEnabledAllChildrenOf(c, enabled);
    }
}
Run Code Online (Sandbox Code Playgroud)