首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用foreach语句循环winform控件时更改循环顺序

如何在使用foreach语句循环winform控件时更改循环顺序
EN

Stack Overflow用户
提问于 2011-11-29 15:00:18
回答 2查看 921关注 0票数 1

我使用Foreach来循环win窗体中的所有控件。但是,Foreach始终按字母顺序排列控件。

我尝试设置制表符索引,并更改控件代码的顺序。但是,循环仍然按字母顺序排列。

有没有一些方法可以在winform中以特定的顺序循环控件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-29 15:06:25

使用LINQ扩展方法.OrderBy() (以及配套的.OrderByDescending()),您可以使用任何您想要的排序。

但由于Controls是一个非泛型集合,您需要首先将其转换为泛型变体。这可以使用.OfType() (过滤器)或.Cast() (强制转换)来完成。

代码语言:javascript
运行
复制
foreach (var c in Controls.OfType<Control>().OrderBy(c => c.Size.Top))
{
    // ...
}

如果需要在执行过程中修改集合,可以使用.ToList()创建快照。

代码语言:javascript
运行
复制
foreach (var c in Controls.OfType<Control>().OrderBy(c => c.Size.Top).ToList())
{
    // ...
}

您需要导入LINQ命名空间才能启用扩展方法。

代码语言:javascript
运行
复制
using System.Linq;
票数 4
EN

Stack Overflow用户

发布于 2011-11-29 15:06:57

foreach遍历控件列表。这个列表是“未排序的”,因此您需要对其进行排序。

如果您需要某些特定的排序,我会将列表复制到字典中,其中键是您要排序的属性。

这里有一个小的虚拟代码,它可以解释我的意思。

代码语言:javascript
运行
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8307019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档