如何在整个控件链中找到类型的控件?

我想找到我的表单中实现某个接口的所有控件(比如说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

回到顶部