Delphi到C#WinForms:在表单上迭代表单组件
在Delphi中,您可以遍历窗体组件(而不是控件),如下所示: 然而,在c#Winforms中,我尝试了以下方法:Delphi到C#WinForms:在表单上迭代表单组件,c#,winforms,delphi,C#,Winforms,Delphi,在Delphi中,您可以遍历窗体组件(而不是控件),如下所示: 然而,在c#Winforms中,我尝试了以下方法: foreach (var component in this.components.Components) { MessageBox.Show(component.ToString()); } 我在谷歌上找不到任何关于如何迭代组件的例子。我所发现的只是如何遍历控件 我想在表单上列出所有控件和组件。 例如,如果
foreach (var component in this.components.Components)
{
MessageBox.Show(component.ToString());
}
我在谷歌上找不到任何关于如何迭代组件的例子。我所发现的只是如何遍历控件
我想在表单上列出所有控件和组件。
例如,如果有2个按钮和2个图像列表,我想列出所有4项。这在c#使用继承的表单时也要非常小心。
与Delphi不同,UnvisualDesigner在组件集合方面不支持oop,它为每个表单创建了一个新集合,甚至为子体也创建了一个集合 我是这样做的:(它将只列出组件而不是控件!)
Delphi中的组件是什么?什么使它不同于控件?delphi中的组件可以是任何东西,例如editbox,也可以是imagelist。它们都保存在同一个集合中。组件列表包含给定组件所拥有的所有组件,控件列表包含唯一的给定组件所属的所有组件difference@GuidoG不是这样。Delphi中的控件是指从
TControl
派生的任何东西。这些都是可视的,它们的识别特征是它们有一个父对象
。当我后来说它们被分离时,我的意思不是在Delphi的更高版本中,而是在Delphi的对象层次结构中。我刚才说的话有点误会。有些组件是TwinControl的后代,有些是TGraphicControl的后代,如果我没记错的话?但所有这些都是作为对象出生的,还是我真的已经完全忘记了Delphi?TControl从何而来?t从TObject继承的持久性?如果我没记错的话。在Borland课程中,他们从未调用过控件(我将它们交给Delphi5)。我第一次学习控件这个术语是在VisualStudio中。不管怎样,我想解释的是,与VisualStudio不同,VisualStudio有两个集合,一个用于控件,一个用于组件,而Delphi中只有一个集合。
foreach (var component in this.components.Components)
{
MessageBox.Show(component.ToString());
}
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)
{
}
}