我需要遍历我正在开发的UserControl中的所有控件和组件 我试过了:
public void Traverse(Control cnt)
{
foreach (Control c in cnt.Controls)
{
if (c.HasChildren) Traverse(c);
Debug.Print(c.Name); // For debugging purpose only
// My code goes here
}
}
当函数遇到 ToolStrip 时出现问题:它没有子项,但是项目(ToolStripItemCollection: IList, ICollection, IEnumerable
)。
我不关心类型:使用Reflection我需要设置一些属性,所以我觉得对象结果很好。
如何获取UserControl中的每个组件的名称?
感谢
答案 0 :(得分:1)
我编写了一个版本,该版本遍历控件的属性,并查找IComponent
个ICollection
的版本:
方式:强>
private void GetControls(ICollection controls, IList<string> names)
{
foreach (var ctl in controls)
{
if (ctl is IComponent)
{
var name = ctl.GetType().GetProperty("Name");
if (name != null)
names.Add((string) name.GetValue(ctl, null));
foreach (var property in ctl.GetType().GetProperties())
{
var prop = property.GetValue(ctl, null);
if (prop is ICollection)
GetControls((ICollection)prop, names);
}
}
}
}
<强>调用强>
var ctlNames = new List<string>();
GetControls(Controls, ctlNames);
我已经对此进行了测试,似乎找到了表单上的所有控件。我没有对每种控制进行测试,我也不能保证它的效率。