C# 自动禁用许多控件

C# 自动禁用许多控件,c#,winforms,C#,Winforms,我用几个按钮、文本框、组合框等创建了一个windows窗体。在执行过程中的某个时刻,我禁用了所有这些按钮,如下所示: Control01.Enabled = false; Control02.Enabled = false; Control03.Enabled = false; // ... Control10.Enabled = false; 如何实现自动化?您可以枚举控件并禁用它们: foreach(var control in Controls.Cast<Control>()

我用几个按钮、文本框、组合框等创建了一个windows窗体。在执行过程中的某个时刻,我禁用了所有这些按钮,如下所示:

Control01.Enabled = false;
Control02.Enabled = false;
Control03.Enabled = false;
// ...
Control10.Enabled = false;

如何实现自动化?

您可以枚举控件并禁用它们:

foreach(var control in Controls.Cast<Control>())
   control.Enabled = false;
foreach(Controls.Cast()中的var控件)
control.Enabled=false;
如果只想禁用按钮,可以使用LINQ

foreach(var control in Controls.OfType<Button>())
   control.Enabled = false;
foreach(Controls.OfType()中的var控件)
control.Enabled=false;
或者如果你有其他的选择标准

var controlsToDisable = Controls.OfType<TextBox>()
                                .Where(t => t.Name.StartsWith("Control")); // etc

foreach(var control in controlsToDisable)
   control.Enabled = false; 
var controlsToDisable=Controls.OfType()
.Where(t=>t.Name.StartsWith(“控制”);//等
foreach(controlsToDisable中的var控制)
control.Enabled=false;

您可以将
for
循环与
控件结合使用。Find()
方法:

string controlIdNr ="";
for(int i=1;i++;i<11)
{
    controlIdNr = "Control" + i.ToString().PadLeft(2,'0');
    this.Controls.Find(controlIdNr,true).Enabled = false;
}
字符串控制IDNR=”“;

对于(int i=1;i++;i,如果您的布局允许,您可以将它们放在一个面板上,并在一行中禁用该面板。或者可以在几个面板中禁用该面板。

但是请注意:
foreach(控件中的按钮b)
不等于LINQ表达式。(这是常见的,但会导致尝试将每个控件强制转换为一个“按钮”)@dognose不,有一种方法
Cast
将尝试将所有控件强制转换为按钮。
类型的
将只返回那些可以强制转换为按钮的控件,如果这些控件分布在用户界面上,则可能有助于将它们放入一个数组中(例如,不在单个容器内,或使用其他不应禁用的控件)。出于某种原因,它无法识别启用的
方法。:-(@JosuéMolina抱歉,您需要转换为控件类型
cast()
因为默认情况下枚举器将返回对象。修复了!@lazyberezovsky>的确!我编辑了我的答案。我更喜欢ASP.NET,FindControl()只需要控件的id;-)