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


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


开发工具: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>));
        }
    }

三、设计界面如下:

四、运行效果如下:

转载于:https://www.cnblogs.com/cncc/p/8038286.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值