如何递归查询Winform的所有Childcontrols?

时间:2010-03-26 16:48:28

标签: c# .net linq controls recursion

我使用Windows窗体。如何以递归方式查询具有特定类型的Form的所有子控件?

在SQL中,您将使用selfjoin来执行此操作。

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

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

编辑:

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

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效(不是任何方式的完美代码......只是为了让这个想法得以实现):

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

答案 1 :(得分:-1)

可能会对你有所帮助......

How can I get all controls from a Form Including controls in any container?

获得列表后,您可以查询'em