C# 如何从不使用TableLayoutPanel的窗体获取控件?

C# 如何从不使用TableLayoutPanel的窗体获取控件?,c#,windows,winforms,tablelayoutpanel,C#,Windows,Winforms,Tablelayoutpanel,在使用TableLayoutPanel的windows窗体应用程序中,我们使用函数获取所有控件 Control control in tableLayoutPanel1.Controls 如果我在表单中不使用TableLayoutPanel,是否有方法获取控件?您可以创建如下扩展方法: public static class ControlExtensions { public static IEnumerable<Control> GetAllControls(this

在使用TableLayoutPanel的windows窗体应用程序中,我们使用函数获取所有控件

Control control in tableLayoutPanel1.Controls

如果我在表单中不使用TableLayoutPanel,是否有方法获取控件?

您可以创建如下扩展方法:

public static class ControlExtensions
{
    public static IEnumerable<Control> GetAllControls(this Control containerControl)
    {
        var controls = Enumerable.Empty<Control>();
        controls = controls.Concat(containerControl.Controls.Cast<Control>());
        foreach (Control control in containerControl.Controls)
        {
            controls = controls.Concat(control.GetAllControls());
        }
        return controls;
    }
}

注意:GetAllControls方法可用于任何
控件,而不仅仅是
表单
如果控件未放置在
TableLayoutPanel
中,则它们可能位于主表单本身。所以ypu可以这样循环通过它们:

foreach (Control c in theForm.GetAllControls())
{
    Debug.WriteLine(c.Name);
}
foreach(Control control in this.Controls)
{
  //do somthing with the controls
}
如果我在表单中不使用TableLayoutPanel,那么获取控件是什么意思?