以正确的顺序循环遍历 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
个实例,然后按名称对它们进行排序,然后获取您想要的文本内容。
我有一些代码循环遍历我的 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
个实例,然后按名称对它们进行排序,然后获取您想要的文本内容。