枚举表单上的控件

时间:2011-03-10 21:05:54

标签: c# .net winforms foreach enumeration

我有一个包含大约30个控件的表单,当用户单击按钮时,每个控件的数据都会保存到文件中。但我需要遍历表单上的每一个控件(我可以做),但它需要按顺序排列,例如,我需要从表单的左上角开始,然后向下工作到底部形式的权利。

这是一个foreach循环如何工作?即:

foreach(Control control in this.Controls)
{
}

或者它是不是按顺序通过它们?

2 个答案:

答案 0 :(得分:4)

这将按照它们添加到表单的顺序返回控件,而不是按视觉顺序。

如果您按照要解析控件的顺序设置了TabIndex,则可以使用LINQ按TabIndex对它们进行排序。

foreach (Control control in this.Controls.Cast<Control>().OrderBy(c => c.TabIndex))
{
}

答案 1 :(得分:2)

您是否还需要枚举控件的子控件?

如果没有,请尝试

foreach(Control control in this.Controls.Cast<Control>().OrderBy(o => o.Location.Y).ThenBy(o => o.Location.X)
{
    ...
}

这将枚举控件,从左上角开始向右移动,然后向下。