加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 22:42:58 所属栏目:Windows 来源:网络整理
导读:我知道如何查找和收集 Windows窗体中使用的所有控件的列表. 像这样的东西: static public void FillControls(Control control,ListControl AllControls){ String controlName = ""; controlName = control.Name; foreach (Control c in control.Controls) {
我知道如何查找和收集 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,DataSet等.

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

编辑:

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

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

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

令人惊讶的是,似乎唯一的方法是通过反思.
private 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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读