我知道如何找到并收集Windows表单中使用的所有控件的列表。类似这样:
static public void FillControls(Control control, List<Control> AllControls)
{
String controlName = "";
controlName = control.Name;
foreach (Control c in control.Controls)
{
controlName = c.Name;
if ((control.Controls.Count > 0))
{
AllControls.Add(c);
FillControls(c, AllControls);
}
}
}
然而,这个函数无法检索到表单底部的非可视组件,例如HelpProvider、ImageList、TableAdapters、DataSets等。
有没有办法获取这些组件的列表?
编辑:
感谢@HighCore指向使用System.ComponentModel.Component代替类似函数,在此函数中可以获取诸如ImageList、Help Provider和BindingSource之类的组件列表。 但是,我仍然错过了TableAdapters和DataSets。我想因为它们直接从Object继承。
请。不要参考旧帖子,那些只获取控件列表的类似函数。
编辑:为什么会有负面票数?这个问题以前从未得到过答案!
System.ComponentModel.Component
),那么你应该使用它而不是Control
。顺便说一句,请将这个可怕的foreach代码改成一个漂亮的.SelectMany()
。 - Federico BerasateguiSelectMany
并不是很有帮助。主要问题在于它将结果添加到作为参数传递的列表中,而不是从设计角度将它们作为结果产生。如果需要,您还可以删除递归并使用显式堆栈。在这里使用foreach
也不是不合适的。 - Servy