我使用Windows窗体。如何以递归方式查询具有特定类型的Form的所有子控件?
在SQL中,您将使用selfjoin来执行此操作。
var result =
from this
join this ????
where ctrl is TextBox || ctrl is Checkbox
select ctrl;
我可以在LINQ中执行此操作吗?
编辑:
LINQ支持连接。为什么我不能使用某种自我加入?
答案 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