我使用Foreach来循环win窗体中的所有控件。但是,Foreach始终按字母顺序排列控件。
我尝试设置制表符索引,并更改控件代码的顺序。但是,循环仍然按字母顺序排列。
有没有一些方法可以在winform中以特定的顺序循环控件?
发布于 2011-11-29 15:06:25
使用LINQ扩展方法.OrderBy()
(以及配套的.OrderByDescending()
),您可以使用任何您想要的排序。
但由于Controls
是一个非泛型集合,您需要首先将其转换为泛型变体。这可以使用.OfType()
(过滤器)或.Cast()
(强制转换)来完成。
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;
发布于 2011-11-29 15:06:57
foreach遍历控件列表。这个列表是“未排序的”,因此您需要对其进行排序。
如果您需要某些特定的排序,我会将列表复制到字典中,其中键是您要排序的属性。
这里有一个小的虚拟代码,它可以解释我的意思。
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();
}
https://stackoverflow.com/questions/8307019
复制相似问题