C# WinForm遍历窗体控件的3种方法

 更新时间:2021年04月12日 08:41:13   作者:五维思考  
这篇文章主要介绍了C# WinForm遍历窗体控件的3种方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下

1.循环遍历

private void GetControls(Control fatherControl)
{
    Control.ControlCollection sonControls = fatherControl.Controls;
    foreach (Control control in sonControls)
    {
        listBox1.Items.Add(control.Name);
    }
}

结果:能获取到Panel、GroupBox、TabControl等控件
问题:Panel等控件上面的子控件获取不到

2.递归遍历

private void GetControls(Control fatherControl)
{
    Control.ControlCollection sonControls = fatherControl.Controls;
    foreach (Control control in sonControls)
    {
        listBox1.Items.Add(control.Name);
        if (control.Controls != null)
        {
            GetControls(control);
        }
    }
}

结果:能获取到绝大多数控件
问题:Timer、ContextMenuStrip等控件获取不到

3.使用反射

private void GetControls(Control fatherControl)
{
    System.Reflection.FieldInfo[] fieldInfo = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
    for (int i = 0; i < fieldInfo.Length; i++)
    {
        listBox1.Items.Add(fieldInfo[i].Name);
    }
}

结果:所有控件都被获取到了

DevExpress控件无法使用this.Controls进行遍历,只能通过反射的方法获得,如下代码:

public void SearchBarManager()
{
    Type FormType = this.GetType();
    FieldInfo[] fi = FormType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
    foreach (FieldInfo info in fi)
    {
        if (info.FieldType == typeof(DevExpress.XtraBars.BarManager))
        {
            DevExpress.XtraBars.BarManager bar = (info.GetValue(this)) as DevExpress.XtraBars.BarManager;
            foreach (DevExpress.XtraBars.BarItem bi in bar.Items)
            {
                MessageBox.Show(bi.Name);
            }
        }
    }
}

以上就是C# WinForm遍历窗体控件的3种方法的详细内容,更多关于WinForm遍历窗体控件的资料请关注脚本之家其它相关文章!

相关文章

  • C#类和结构详解

    C#类和结构详解

    本文详细讲解了C#中的类和结构,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C#使用Socket实现局域网聊天

    C#使用Socket实现局域网聊天

    这篇文章主要为大家详细介绍了C#使用Socket实现局域网聊天的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • C#中yield return用法分析

    C#中yield return用法分析

    这篇文章主要介绍了C#中yield return用法,对比使用yield return与不使用yield return的流程,更直观的分析了yield return的用法,需要的朋友可以参考下
    2014-09-09
  • unity使用链表实现贪吃蛇游戏

    unity使用链表实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了unity使用链表实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • WPF中引入WindowsForms控件的方法

    WPF中引入WindowsForms控件的方法

    这篇文章主要介绍了WPF中引入WindowsForms控件的方法,结合实例形式分析了在WPF中调用Windows Forms控件的具体步骤与相关实现技巧,需要的朋友可以参考下
    2016-07-07
  • c#取得控制台应用程序根目录

    c#取得控制台应用程序根目录

    编写程序的时候,经常需要用的项目根目录。现在把方法总结如下分享给大家
    2014-01-01
  • C# JWT权限验证的实现

    C# JWT权限验证的实现

    本文主要介绍了C# JWT权限验证的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C#获取哈希加密生成随机安全码的类实例

    C#获取哈希加密生成随机安全码的类实例

    这篇文章主要介绍了C#获取哈希加密生成随机安全码的类,涉及C#哈希加密及字符串操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • C#编程之事务用法

    C#编程之事务用法

    这篇文章主要介绍了C#编程之事务用法,结合实例形式对比分析了C#中事务提交与回滚的具体实现技巧与相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • c# n个数排序实现代码

    c# n个数排序实现代码

    c# n个数排序实现代
    2009-07-07

最新评论