我已经尝试了很多方法来列出表单的所有非可视组件,例如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;
}
知道如何解决这个问题吗?
答案 0 :(得分:2)
private IEnumerable<Component> EnumerateComponents()
{
return this.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(f => typeof(Component).IsAssignableFrom(f.FieldType))
.Where(f => !typeof(Control).IsAssignableFrom(f.FieldType))
.Select(f => f.GetValue(this))
.OfType<Component>();
}