前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WinForm枚举容器中的控件,实现控件统一事件处理机制

WinForm枚举容器中的控件,实现控件统一事件处理机制

作者头像
跟着阿笨一起玩NET
发布2018-09-18 13:40:04
6800
发布2018-09-18 13:40:04
举报
文章被收录于专栏:跟着阿笨一起玩NET
代码语言:javascript
复制
我们知道,要在应用程序中使用事件,必须提供一个事件处理程序(事件处理方法),这通常用委托来实现。但当想对某个容器中的同类控件的相同事件都实现相同的处理方法时,可能通过枚举容器中的控件并指定相关委托来实现事件的处理。或许你会说,干吗要说得这么复杂,我可以在控件的属性中指定事件处理方法来实现,但当容器中的控件很多,或者在设计过程中加入了新的控件,逐个指定毕竟是很麻烦的一件事。
    如下图所示,在应用中有两个文本框,我想指定两个文本框(用户名与密码)的Enter、Leave与Validating事件,当文本框获得焦点时改变其背景色,当离开时还原为系统文本颜色,并用Validating方法检查文本框内容是否为空,为空时用ErrorProvider显示错误信息。
    我通过方法AddEventHandler来枚举窗体中的控件,当它是文本框时指定事件的委托,代码如下:

        /**//// <summary> 
        /// 枚举容器中的控件,并增加文本框的事件处理委托 
        /// </summary> 
        /// <param name="pnl">container</param> 
        private void AddEventHandler(Control pnl) 
        { 
            foreach(Control ctrl in pnl.Controls) 
            { 
                if(ctrl is TextBox) 
                { 
                    ctrl.Enter+=new EventHandler(this.txt_Enter); 
                    ctrl.Leave+=new EventHandler(this.txt_Leave); 
                    ctrl.TextChanged+=new EventHandler(this.txt_TextChanged); 
                    ctrl.Validating+=new CancelEventHandler(this.txt_Validating); 
                } 
                if(ctrl.HasChildren)                     //递归注册事件。
                    AddEventHandler(ctrl); 
            } 
        } 
 
 
        /**//// <summary> 
        /// 实现文本框的Enter事件处理方法 
        /// </summary> 
        /// <param name="sender"></param> 
        /// <param name="e"></param> 
        private void txt_Enter(object sender,System.EventArgs e) 
        { 
            TextBox tb=(TextBox)sender; 
            tb.BackColor=Color.BlanchedAlmond; 
        } 
 
        /**//// <summary> 
        /// 实现文本框的Leave事件处理方法 
        /// </summary> 
        /// <param name="sender"></param> 
        /// <param name="e"></param> 
        private void txt_Leave(object sender,System.EventArgs e) 
        { 
            TextBox tb=(TextBox)sender; 
             
            tb.BackColor=Color.FromKnownColor(KnownColor.Window); 
        } 
 
        /**//// <summary> 
        /// 实现文本框的Validating事件处理方法 
        /// </summary> 
        /// <param name="sender"></param> 
        /// <param name="e"></param> 
        private void txt_Validating(object sender,System.ComponentModel.CancelEventArgs e) 
        { 
            TextBox tb=(TextBox)sender; 
            errorProvider1.SetError(tb,""); 
            if(tb.Text.Length==0) 
            { 
                errorProvider1.SetError(tb,"Please input any text!"); 
                tb.Focus(); 
            } 
        } 


然后在Form1的构造函数中增加AddEventHandler(this)语句:
        public Form1() 
        { 
            // 
            // Windows 窗体设计器支持所必需的 
            // 
            InitializeComponent(); 
         
            AddEventHandler(this); 
        }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-03-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档