以正确的顺序循环遍历 groupBox 控件

Looping through groupBox controls in the right order

我有一些代码循环遍历我的 groupBox 控件并获取控件的名称。然后它将名称写入文本框。但是,它们循环的顺序需要与名称 gb1、gb2、gb3 一致……它们现在循环的顺序似乎是它们创建的顺序(时间上).我已经整理了设计器代码,所以控件的创建按我想要的方式排序,但它似乎没有什么区别。任何指针?谢谢

private void loopThroughControls()
    {
        foreach (Control ctrl in this.Controls)
          {                
            if (ctrl.ToString().StartsWith("System.Windows.Forms.GroupBox"))
            {
              txtEntry.Text += (ctrl.Text + System.Environment.NewLine);
            }
          }
    }

为什么不在遍历之前对列表进行排序?

foreach (var ctrl in this.Controls.OrderBy(c => c.Name))
{
    // ...
}

扩展 Tomas 的回答:

  private void LoopThroughControls()
  {
     foreach (var ctrl in this.Controls.OfType<GroupBox>().OrderBy(c => c.Name))
     {
        txtEntry.Text += (ctrl.Text + System.Environment.NewLine);
     }
  }

这将从 Controls 集合中检索 GroupBox 个实例,然后按名称对它们进行排序,然后获取您想要的文本内容。