c# - 对多个 ControlCollection 进行 Foreach

标签 c# linq lambda foreach controlcollection

我的 Windows 窗体中有一个选项卡控件,我想循环访问两个不同选项卡中的每个元素。打开文件时,我希望启用两者的所有元素,而当文件关闭时,所有元素都将被禁用。

但是,我不知道如何完成此操作,因为控件不在数组或列表中,而是在 ControlsCollection 中。我刚才问过有关 foreach 语句的问题,并了解了一些有关 lambda 的知识,但我不知道如何在这里应用它。

这是我所拥有的:

List<Control.ControlCollection> panels = new List<Control.ControlCollection>();
panels.Add(superTabControlPanel1.Controls);
panels.Add(superTabControlPanel2.Controls);
foreach(Control.ControlCollection ctrlc in panels){
    foreach (Control ctrl in ctrlc) { 

    }
}

这是否可以通过一个 foreach 语句实现,或者更简单一些?

最佳答案

我会使用 Linq,具有以下内容:

foreach (var ctrl in panels.SelectMany (x => x.Cast<Control> ())) {
     // Work with the control.
}

关键是使用 Cast IEnumerable 上的扩展方法,使其可用于 SelectMany。

关于c# - 对多个 ControlCollection 进行 Foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696405/

相关文章:

c# - Windows通知图标c#更改消息而不刷新

c# - .net 中的任意精度浮点类型。有什么图书馆允许这样做吗?

c# - LINQ 查询仅计算某些值

c# - 如何在 MVC 4 中使用 Split() 方法运行 Distinct() 方法?

c# - LINQ to Entities 无法识别方法 'System.Linq.IQueryable` 1

python - 变量如何在函数内部取值而不在任何地方声明

c# - 提取 .zip 存档的最快方法

c# - 多重继承

c++ - 为什么使用 Lambdas/Closures 调用 CopyConstructor?

c# - Linq 嵌套列表表达式