WinForm控件查找奇思

简介:

  最近做WinForm程序,尽搞些动态生成控件的,每次寻找某个空间时总要一大堆代码,简单但是写的多,烦啊。突然想起了Linq里的表达式方式,但是项目用的类库是2.0的。最后仿照Linq用范型写了一个遍历类:减少了一大堆不必要的代码。

代码很简单,就不用解释了,直接贴↑。

 


 
 
  1. public delegate bool SearchHandler(Control ctrFind);  
  2.     public class WinSearch<T>  
  3.     {  
  4. //ctr:查找起点控件。  
  5.         public static T Search(Control ctr, SearchHandler handler)  
  6.         {  
  7.             if (handler == null)  
  8.                 throw new Exception("Handler must be not null");  
  9.             if (ctr == null)  
  10.                 throw new Exception("Parent Control must be not null");  
  11.             if (!(ctr is Control))  
  12.                 throw new Exception("The fist parameter must be innert from Control");  
  13.             return SearchProxy(ctr, handler);  
  14.         }  
  15.  
  16.         protected static T SearchProxy(Control ctr,SearchHandler handler)  
  17.         {  
  18.             if (ctr.Controls.Count < 1)  
  19.             {  
  20.                 return default(T);  
  21.             }  
  22.             else 
  23.             {  
  24.                 foreach (Control child in ctr.Controls)  
  25.                 {  
  26.                     if (child is T  && handler(child))//注意返回范型类型应是如此才会返回。  
  27.                     {  
  28.                         return (T)(object)child;  
  29.                     }  
  30.                     else 
  31.                     {  
  32.                         foreach (Control ch in child.Controls)  
  33.                         {  
  34.                             object obj = SearchProxy(ch, handler);  
  35.                             if (obj !=null)  
  36.                             {  
  37.                                 return (T)obj;  
  38.                             }  
  39.                         }  
  40.                     }  
  41.                 }  
  42.                 return default(T);  
  43.             }  
  44.         }  
  45.          
  46.               
  47.     }  
  48.     
  49. 测试体:  
  50.    
  51.  private void button1_Click(object sender, EventArgs e)  
  52.         {  
  53.             Button btn = WinSearch<Button>.Search(this, new SearchHandler(mehtod));  
  54.             if (btn != null)  
  55.             {  
  56.                 MessageBox.Show(btn.Text);  
  57.             }  
  58.         }  
  59.         public bool mehtod(Control ctr)  
  60.         {  
  61.             if (ctr.Text =="button2")  
  62.                 return true;  
  63.             return false;  
  64.         }  




 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/833551,如需转载请自行联系原作者

相关文章
|
C# 索引 Windows
Winform控件优化之TabControl控件的使用和常用功能
TabControl是一个分页切换(tab)控件,不同的页框内可以呈现不同的内容,将主要介绍调整tab的左右侧显示、设置多行tab、禁用或删除tabpage、隐藏TabControl头部的选项卡等
4967 0
Winform控件优化之TabControl控件的使用和常用功能
|
3月前
|
开发框架 缓存 前端开发
使用扩展函数方式,在Winform界面中快捷的绑定树形列表TreeList控件和TreeListLookUpEdit控件
使用扩展函数方式,在Winform界面中快捷的绑定树形列表TreeList控件和TreeListLookUpEdit控件
|
C#
27【C#】WinForm中如何获取一个控件相对于主界面的位置
使用button控件的 PointToScreen 方法和Form控件的 PointToClient 方法来获取button1相对于Form边界的位置。具体步骤如下:
220 0
窗体界面控件源码解析
这是我早期自己编写的一段代码,注释不是很详细,只是对必要部分做了简短说明。现在把所有的源码发布出来,对希望对这方面编程感兴趣的朋友提供可参考的资料
535 0
|
C# 前端开发
WPF Adorner+附加属性 实现控件友好提示
原文:WPF Adorner+附加属性 实现控件友好提示 标题太空泛,直接上图   无论是在验证啊,还是提示方面等一些右上角的角标之类的效果,我们会怎么做? 这里介绍一种稍微简单一些的方法,利用附加属性和Adorner来完成。
998 0
|
Android开发
UWP 查找模板中的控件
原文:UWP 查找模板中的控件 这个标题我也不知道咋起,意思说一下你就明白。 1. 对官方控件的模板进行定制修改,以满足多样化需求,还有漂亮的UI 比如ListView,GridView等。 2.
805 0
|
C#
wpf 深度复制控件,打印控件
原文:wpf 深度复制控件,打印控件 ...
1039 0
|
C#
WPF查找子控件和父控件方法
原文:WPF查找子控件和父控件方法 public List GetChildObjects(DependencyObject obj, string name) where T : FrameworkElement { Dependen...
1408 0