在Windows窗体上查找组件c#(不是控件)

前端之家收集整理的这篇文章主要介绍了在Windows窗体上查找组件c#(不是控件)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道如何查找和收集 Windows窗体中使用的所有控件的列表.
像这样的东西:
  1. static public void FillControls(Control control,List<Control> AllControls)
  2. {
  3. String controlName = "";
  4. controlName = control.Name;
  5.  
  6. foreach (Control c in control.Controls)
  7. {
  8. controlName = c.Name;
  9. if ((control.Controls.Count > 0))
  10. {
  11. AllControls.Add(c);
  12. FillControls(c,AllControls);
  13. }
  14. }
  15. }

但是,此函数不会检索表单底部的非可视组件,如HelpProvider,ImageList,TableAdapters,DataSet等.

有没有办法获得这些组件的列表?

编辑:

感谢@HighCore指示我在类似的函数中使用System.ComponentModel.Component确实为我提供了一个包含ImageList,Help Provider和BindingSource等组件的列表.
但是,我仍然从这个列表中错过了TableAdapters和DataSet.我想因为那些直接从Object继承.

请.不要将我的旧帖子推荐给我,这些帖子显示了与我类似的功能,并且只获取控件列表.

编辑:为什么负面投票?这个问题以前从未得到过回答!

令人惊讶的是,似乎唯一的方法是通过反思.
  1. private IEnumerable<Component> EnumerateComponents()
  2. {
  3. return from field in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
  4. where typeof (Component).IsAssignableFrom(field.FieldType)
  5. let component = (Component) field.GetValue(this)
  6. where component != null
  7. select component;
  8. }

猜你在找的Windows相关文章