【发布时间】:2013-06-14 20:19:29
【问题描述】:
我知道如何查找和收集 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。
请。不要让我参考显示与我的功能相似且仅获取控件列表的旧帖子。
编辑:为什么会投反对票?这个问题从来没有人回答过!
【问题讨论】:
-
我不熟悉winforms,但如果你要找的是
Components(即System.ComponentModel.Component),你应该使用它而不是Control。顺便说一句,请把这个可怕的 foreach 代码改成漂亮的.SelectMany() -
@HighCore
SelectMany的使用在这里并没有那么有用。主要问题是,从设计的角度来看,它将结果添加到作为参数传入的列表中,而不是作为结果产生它们。如果需要,您还可以删除递归并使用显式堆栈。不过,在这里使用foreach并不是不合适的。 -
不,这与您指出的内容不重复。我要求的是非视觉组件,而不是控件。该帖子上的问题提到了“组件”,但解决方案仅解决了获取控件列表。
标签: c# winforms visual-studio-2012 controls components