c# - 如何递归查询 Winform 的所有子控件?

标签 c# .net linq controls recursion

<分区>

我正在使用 Windows 窗体。如何递归查询具有特定类型的表单的所有子控件?

在 SQL 中,您可以使用自连接来执行此操作。

var result = 
  from this 
  join this ????
  where ctrl is TextBox || ctrl is Checkbox
  select ctrl;

我也可以在 LINQ 中执行此操作吗?

编辑:

LINQ 支持联接。为什么我不能使用某种自连接?

最佳答案

像这样的东西应该可以工作(无论如何都不是完美的代码......只是为了传达这个想法):

public IEnumerable<Control> GetSelfAndChildrenRecursive(Control parent)
{
    List<Control> controls = new List<Control>();

    foreach(Control child in parent.Controls)
    {
        controls.AddRange(GetSelfAndChildrenRecursive(child));
    }

    controls.Add(parent);

    return controls;
}

var result = GetSelfAndChildrenRecursive(topLevelControl)
    .Where(c => c is TextBox || c is Checkbox);

关于c# - 如何递归查询 Winform 的所有子控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525062/

相关文章:

c# - 通过 Linq 使用 Json.Net 查找节点以插入或删除子节点

c# - 使用 MVC 5 和 Asp.net Identity 的电子邮件确认

c# - 用于从 ASP.NET C#(服务器端)中的 HTML 元素中删除 onclick =""属性的正则表达式

c# - 为什么我们要将 ClassInterface 属性应用于类?

c# - 如何遍历 Linq 中 .select 语句中的所有元素

.net - LINQ to Entities 无法识别方法

c# - 如何使用 Visual Studio 2008 部署 asp.net 应用程序

c# - 如何将 AggregateException 展开为单个异常?

c# - 无法安装 nuget 包 - 找不到包错误

.net - 是否有 WPF 控件可用于展开/折叠面板(动画)