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遍历窗体控件的资料请关注脚本之家其它相关文章!

相关文章

  • Unity实现刮奖效果

    Unity实现刮奖效果

    这篇文章主要为大家详细介绍了Unity实现刮奖效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 轻松学习C#的读写操作

    轻松学习C#的读写操作

    轻松学习C#的读写操作,小编也是第一次接触C#的读写操作,感兴趣的小伙伴们可以参考一下,大家一起学习
    2015-11-11
  • Unity3D Shader实现扫描显示效果

    Unity3D Shader实现扫描显示效果

    这篇文章主要为大家详细介绍了Unity3D Shader实现扫描显示效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C# WinForm创建Excel文件的实例

    C# WinForm创建Excel文件的实例

    下面小编就为大家带来一篇C# WinForm创建Excel文件的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • VS2010写的程序在自己电脑可以运行、其他电脑上不能运行的解决方案

    VS2010写的程序在自己电脑可以运行、其他电脑上不能运行的解决方案

    自己用Visual Studio 2010 旗舰版写了一个软件,在自己电脑上运行完全没有问题,但是拷贝到其他人电脑上之后不管双击还是以管理身份运行,均没有反应,进程管理器中相关进程也只是一闪而过
    2013-04-04
  • C#实现在启动目录创建快捷方式的方法

    C#实现在启动目录创建快捷方式的方法

    这篇文章主要介绍了C#实现在启动目录创建快捷方式的方法,涉及C#快捷方式的创建技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 使用Deflate算法对文件进行压缩与解压缩的方法详解

    使用Deflate算法对文件进行压缩与解压缩的方法详解

    本篇文章是对使用Deflate算法对文件进行压缩和解压缩的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • WPF自定义控件的实现

    WPF自定义控件的实现

    本文主要介绍了WPF自定义控件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • C#使用Post调用接口并传递json参数

    C#使用Post调用接口并传递json参数

    这篇文章主要介绍了C#使用Post调用接口并传递json参数,具有很好的参考价值,希望对大家有所帮助。
    2022-06-06
  • C#中常用的正则表达式实例

    C#中常用的正则表达式实例

    正则表达式在程序设计中有着重要的位置,它经常被用于处理字符串信息,下面是C#中常用的正则表达式实例,感兴趣的朋友一起看看吧
    2016-10-10

最新评论