如何在整个控件链中找到类型的控件?
我想找到我的表单中实现某个接口的所有控件(比如说ITestInterface
)。我曾经尝试这样做:如何在整个控件链中找到类型的控件?
this.Controls.OfType<ITestInterface>();
但专家组只有一个深深的(尽管你是怎样MSDN - @dasblinkenlight)的水平,所以,如果例如,我在形式的面板和面板内的ITestInterface
控制,它不会找到它。
如何做到这一点?
编辑:作为@HansPassant在评论中写道,我可以硬编码我的名字的面板,但是,我需要一个通用的解决方案,而不是一个具体的解决方案,以一种特殊形式。
回答:
你必须使用递归并通过您的控件的Controls
属性步骤:
private IEnumerable<T> GetAllOfType<T>(Control rootControl) {
return rootControl.Controls.OfType<T>().
Concat(rootControl.Controls.OfType<Control>().SelectMany(GetAllOfType<T>));
}
您可以使用此类似:
var allOfTestInterface = GetAllOfType<ITestInterface(this);
这需要所有的控制与直接包含在接口通过根控件(调用您的OfType<>()
),然后再次调用该方法包含的所有控件的,从而递归遍历所有容器。 SelectMany
将此嵌套列表展平成一个列表。
以上是 如何在整个控件链中找到类型的控件? 的全部内容, 来源链接: utcz.com/qa/264142.html