【发布时间】:2015-01-17 12:48:30
【问题描述】:
我尝试了许多方法来列出表单的所有非可视组件,例如 OpenDialog、ImageList、TableAdapters 等,但找不到任何东西。为了找到屏幕控件,我在“控件”屏幕中使用 Foreach 进行了管理,但对于那些非可视组件,我什么也没找到。我使用了下面的代码但没有成功:
private IEnumerable<Component> EnumerateComponents()
{
return from field in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
where typeof (Component).IsAssignableFrom(field.FieldType)
let component = (Component) field.GetValue(this)
where component != null
select component;
}
知道如何解决这个问题吗?
【问题讨论】:
-
你有任何证据表明所有这些实际上共享一个基类吗?我不认为他们这样做。您可以将它们拖到表单的“非可视”区域这一事实只是一种花哨的抽象。
-
@BradleyDotNET
Do you have any evidence that all those actually share a base class?我认为 OP 有。他们都共享Component基类 -
@L.B 即使这样; OP 并没有说明他的代码中有什么不起作用(因此我的假设)。