禁用页面上的多个按钮控件

时间:2010-02-25 20:18:08

标签: c# asp.net button

有没有办法一次性禁用页面上的所有按钮。?

if (Directory.Exists(folder))
            { 
              all buttons enabled
            }
            else
            {
                All buttons disabled 
                Label4.Text = "Agent Share folder does not exists";
            }

任何建议 感谢

5 个答案:

答案 0 :(得分:8)

foreach (Button button in this.Controls.OfType<Button>())
    button.Enabled = false;

修改

您实际上可能需要做更多的事情。 Controls集合仅获取作为特定父项的直接子项的控件,并且它不会递归搜索整个页面以查找 all 按钮。您可以使用this page上的递归函数来递归查找所有按钮并禁用它们中的每一个按钮。

如果您从上面的链接页面添加代码,那么您的代码将是:

foreach (Button button in FindControls<Button>(this))
    button.Enabled = false;

一旦你使用它们,这些递归方法在ASP.NET中会非常方便。

答案 1 :(得分:1)

正如其他答案所说,最终您将需要在页面中循环并查找和禁用包含元素。减轻这种情况的一种方法可能是将所有必要的按钮放在面板(或多个面板)中,并禁用面板代替按钮。

答案 2 :(得分:1)

在Windows窗体环境中,这样的东西应该对你有用:

    private void ToggleActivationOfControls(Control ContainingControl, Boolean ControlIsEnabled)
    {
        try
        {
            foreach (Control ctrl in ContainingControl.Controls)
            {
                if (ctrl.GetType() == typeof(Button))
                { 
                    ctrl.Enabled = ControlIsEnabled;
                }
            }
        }
        catch (Exception ex)
        {
            Trace.TraceError("Error occurred during ToggleActivationOfControls");

        }
    }

答案 3 :(得分:0)

伪代码:

for each (Control c in Page.Controls)
    if (typeof(c) == Button)
         c.enabled = false;

答案 4 :(得分:0)

行间的某些内容可能有所帮助:

protected void DisableButtons(Control root)
{
     foreach (Control ctrl in root.Controls)
     {
          if (ctrl is Button)
          {
              ((WebControl)ctrl).Enabled = false;
          }
          else
          {
              if (ctrl.Controls.Count > 0)
              {
                   DisableButtons(ctrl);
              }
          }
     }
}

可以像这样调用:

protected void Page_Load(object sender, EventArgs e) 
{
    DisableButtons(this);
}