【问题标题】:Forms : Enabled/Disable all controls in a container (panel)表单:启用/禁用容器(面板)中的所有控件
【发布时间】:2015-06-18 12:47:40
【问题描述】:

我正在编写 C# Forms 应用程序,想知道如何启用/禁用面板中的所有控件容器。

这是我的代码:

private void EnabledPanelContents(Panel panel, bool enabled)
{
    foreach (var item in panel.Controls)
    {
        item.enabled = enabled;
    }
}

panel.Controls 集合中没有启用的属性。

如何启用/禁用面板中的所有控件容器。

提前致谢。

【问题讨论】:

  • 为什么不能使用item.enabled=false
  • 您可以将面板的 enable 属性设置为 false

标签: c# winforms panel form-control


【解决方案1】:

您将获得var 的控件并对其进行迭代,而var 不包含任何property Enabled。您需要遍历控件并将每个控件作为Control。试试这个

private void EnabledPanelContents(Panel panel, bool enabled)
{
    foreach (Control ctrl in panel.Controls)
    {
        ctrl.Enabled = enabled;
    }            
} 

启用可以是truefalse

【讨论】:

  • 投票,我认为输入 ctrl.Enabled = enabled; 而不是 ctrl.Enabled = true; 更好
  • @ahmedab​​delqader 你是对的,但我只是举了个例子,所以只是使用true 而不是enabled 谢谢你的建议。我会更新答案。
  • 为什么我会得到这个? “system.web.ui.control”不包含“启用”的定义”
【解决方案2】:

“如何启用/禁用面板中的所有控件容器。”

答: 如果要禁用或启用面板内的所有控件,可以直接调用,

Panel panel; 
-> panel.Enabled = true;//For enabling all controls inside the panel.
-> panel.Enabled = false;//For disabling all controls inside the panel.

如果您只想启用或禁用面板内的特定控件,则可以遍历控件集合并根据您的要求将其启用状态设置为 true 或 false。

【讨论】:

  • 这似乎是一个比接受的答案更好的答案。它既解决了问题,又处理了递归等情况。虽然不是针对 XAML,但它确实允许(在 XAML 中)将启用状态绑定到变量,从而简化代码要求。
【解决方案3】:

如果您将 item 声明为 var(在 foreach 循环中),它将不具有 windows 控件的属性。 您应该将其声明为控件。

试试这个代码 sn-p 它应该可以工作:

foreach (Control item in panel.Controls)
{
     item.Enabled = true;      // = true: enable all, = false: disable all
}

【讨论】:

    【解决方案4】:

    试试下面的代码,

        private void DisableAll_Click(object sender, EventArgs e)
        {
            EnabledPanelContents(this.panel1, false);
        }
    
        private void EnabledPanelContents(Panel panel, bool enabled)
        {
            foreach (Control item in panel.Controls)
            {
                item.Enabled= enabled;
            }
        }
    

    【讨论】:

      【解决方案5】:

      @anshu

      如果您的控件是 HTML 控件,则使用

      foreach (Control ctrl in myControl1.Controls)
          if (ctrl is HtmlControl)
              ((HtmlControl)ctrl).Disabled = true;
      

      【讨论】:

        【解决方案6】:
        private void Form1_Load(object sender, EventArgs e)
        { 
            foreach (Control item in panel.Controls)
                if (ctrl is Button)
                    ((Button)item).Enabled = false;
        }
        

        【讨论】:

        • 我已在您的回答中修正了formatting。将来,您应该正确格式化您的帖子以使其可读。 From review
        猜你喜欢
        • 1970-01-01
        • 2013-09-17
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 2016-12-18
        相关资源
        最近更新 更多