C#使用Windows窗体中使用的所有按钮填充数组

Cla*_*ton 5 c# winforms

我正在尝试使用所有Button正在使用的s 来填充数组Form1.

Button[] ButtonArray = new Button[5];

ButtonArray[0] = button1;   
ButtonArray[1] = button2;   
ButtonArray[2] = button3;   
ButtonArray[3] = button4;   
ButtonArray[4] = button5;
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常.但是,如果我有100个按钮,这是一个很长的过程.

Dmi*_*nko 16

如果所有Buttons都在表单上,​​您可以尝试使用Linq:

using System.Linq;

...

Button[] ButtonArray = Controls
  .OfType<Button>()
  .ToArray();
Run Code Online (Sandbox Code Playgroud)

编辑:如果您在组框,面板中有一些按钮(即不直接在窗体上,但在某种容器上),您必须将代码详细说明为

private static IEnumerable<Button> GetAllButtons(Control control) {
  IEnumerable<Control> controls = control.Controls.OfType<Control>();

  return controls
    .OfType<Button>()
    .Concat<Button>(controls
       .SelectMany(ctrl => GetAllButtons(ctrl)));
}

...

Button[] ButtonArray = GetAllButtons(this).ToArray();
Run Code Online (Sandbox Code Playgroud)

请参见如何获取特定类型(按钮/文本框)的Windows窗体表单的所有子控件?详情

  • 请注意,`OfType`不会递归搜索,因此如果按钮位于面板或组框或任何其他容器控件中,则找不到它. (2认同)