0

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

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

我怎样才能自动化呢?

4

3 回答 3

5

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

foreach(var control in Controls.Cast<Control>())
   control.Enabled = false;

如果只想禁用按钮,可以使用 LINQ

foreach(var control in Controls.OfType<Button>())
   control.Enabled = false;

或者,如果您有其他选择标准

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

foreach(var control in controlsToDisable)
   control.Enabled = false; 
于 2013-06-26T16:02:43.017 回答
1

您可以将for循环与Controls.Find()方法结合使用:

string controlIdNr ="";
for(int i=1;i++;i<11)
{
    controlIdNr = "Control" + i.ToString().PadLeft(2,'0');
    this.Controls.Find(controlIdNr,true).Enabled = false;
}

这当然是如果您的控件具有结构化的 id 值。如果要禁用所有控件或给定类型的所有控件,lazyberezovsky 的答案更好!

PS:我没有测试过代码,但无论如何都是这样的......

于 2013-06-26T16:02:49.410 回答
1

如果您的布局允许,您可以将它们放在面板上并在一行中禁用面板。或者可能是几个面板。

于 2013-06-26T16:03:28.043 回答