如何在使用foreach语句循环窗体控件时更改循环的顺序
本文关键字:循环 控件 顺序 窗体 foreach 语句 | 更新日期: 2023-09-27 18:15:57
我使用Foreach循环所有控件在一个双赢的形式。但是,Foreach总是按字母顺序排列控件。
我尝试设置选项卡索引,并更改控件代码的顺序。然而,循环仍然是按字母顺序排列的。
是否有一些方法在窗体中以特定的顺序循环控件?
使用LINQ扩展方法.OrderBy()
(及其同伴.OrderByDescending()
),您可以使用任何您想要的排序。
但是由于Controls
是一个非泛型集合,您需要首先将其转换为泛型变体。这可以用.OfType<T>()
(过滤器)或.Cast<T>()
(强制转换)来完成。
foreach (var c in Controls.OfType<Control>().OrderBy(c => c.Size.Top))
{
// ...
}
如果您需要在运行时修改集合,您可以使用.ToList()
创建快照。
foreach (var c in Controls.OfType<Control>().OrderBy(c => c.Size.Top).ToList())
{
// ...
}
你需要导入LINQ命名空间来启用扩展方法。
using System.Linq;
foreach遍历List of Controls。这个列表是"未排序的",因此你需要对它进行排序。
如果您需要一些特定的排序,我会将列表复制到字典中,其中键是您要排序的属性。
这里有一小段伪代码,可以解释我的意思。
Dictionary<int, IControl> controls = new Dictionary<int, IControl>();
foreach(IControl control in form.Controls){
int tabIndex = control.TabIndex;
controls.add(tabIndex, control);
}
controls.Sort();
foreach(IKeyValuePair<int, IControl> control controls){
control.DoSome();
}