在Delphi中,您可以像这样遍历表单组件(不是控件):
for i := 0 to Form1.ComponentCount - 1 do begin
但是在 c# Winforms 中,我尝试了以下方法:
foreach (var component in this.components.Components)
{
MessageBox.Show(component.ToString());
}
我在谷歌上找不到任何关于如何迭代组件的示例。我发现的只是如何循环访问控件。
我想列出窗体上的所有控件和组件。例如,如果有 2 个按钮和 2 个图像列表,我想列出所有 4 个项目。
这在 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)
{
}
}