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

4
我正在使用Windows窗体。如何递归查询所有具有特定类型的子控件?在SQL中,您可以使用自联接来执行此操作。
var result = 
  from this 
  join this ????
  where ctrl is TextBox || ctrl is Checkbox
  select ctrl;

我能在LINQ中实现这个吗?

编辑:

LINQ支持连接操作,那我不能使用自连接吗?

2个回答

4

类似这样的代码应该可以运行(并不是完美的代码,只是为了让想法更清晰):

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);

该签名返回IEnumerable,但实际上你正在返回一个列表。考虑使用yield return进行延迟处理。 - as9876

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接