本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!


开发工具:VS2017

语言:C#

DotNet版本:.Net FrameWork 4.0及以上

一、本文使用的C#语言要点有以下几个:

拓展方法、泛型方法、泛型约束、递归,不懂的可以自行百度

二、具体代码如下:

原始版(不使用SelectMany):

    public static class Ulity
    {
        public static IEnumerable<T> GetChildControls<T>(this Control control) where T:Control
        {
            if (control.Controls.Count == 0) return Enumerable.Empty<T>();
            IEnumerable<T> firstControls = control.Controls.OfType<T>();
            IEnumerable<T> secondControls = Enumerable.Empty<T>();
            bool theSame = false;
            foreach (var item1 in control.Controls)
            {
                theSame = false;
                foreach (var item2 in firstControls)
                {
                    if(item1 == item2)
                    {
                        theSame = true;
                        break;
                    }
                }
                if(!theSame)
                {
                    secondControls = secondControls.Concat(GetChildControls<T>((Control)item1));
                }
                
            }
            return firstControls.Concat(secondControls);
        }
    }

简洁版(使用SelectMany):

    public static class Ulity
    {
        public static IEnumerable<T> GetChildControls<T>(this Control control) where T:Control
        {
            if (control.Controls.Count == 0) return Enumerable.Empty<T>();
            return control.Controls.OfType<T>().Concat(control.Controls.OfType<Control>().SelectMany(GetChildControls<T>));
        }
    }

三、设计界面如下:

[C#]获得WindowsForm上所有特定类型的控件

四、运行效果如下:

[C#]获得WindowsForm上所有特定类型的控件

相关文章:

  • 2021-07-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-14
  • 2022-12-23
猜你喜欢
  • 2021-07-25
  • 2021-10-27
  • 2022-12-23
  • 2022-03-10
  • 2022-02-07
相关资源
相似解决方案