在Delphi中,您可以像这样迭代表单组件(不是控件):
foreach (var component in this.components.Components)
{
MessageBox.Show(component.ToString());
}
然而在c#Winforms中我尝试了以下内容:
{{1}}
我无法在谷歌上找到有关如何迭代组件的任何示例。我发现的只是如何迭代控件。
我想列出表单上的所有控件和组件。 例如,如果有2个按钮和2个图像列表,我想列出所有4个项目。
答案 0 :(得分:3)
这在c#中并不容易 使用继承表格时也要非常小心 与Delphi不同,在组件集合方面,不可见的设计师不支持oop,甚至为后代创建了为每个表单创建的新集合!
我是这样做的:(它只列出组件而非控件!)
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;
}
你可以这样称呼它:
foreach (Component component in EnumerateComponents())
{
if (component is ImageList)
{
}
}