前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >event & delegate Demo(事件&委托示例)

event & delegate Demo(事件&委托示例)

作者头像
菩提树下的杨过
发布2018-01-22 16:47:29
6600
发布2018-01-22 16:47:29
举报
文章被收录于专栏:菩提树下的杨过
代码语言:javascript
复制
using System;

using System.ComponentModel;

using System.Windows.Forms;



namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        public delegate void ActionEventHandler(object sender, ActionCancelEventArgs ev);//声明一个delegate

        public static event ActionEventHandler Action;//声明一个名为Action的事件



        string _time = "";



        public Form1()

        {

            InitializeComponent();

            Form1.Action += new ActionEventHandler(Form1_Action);//为事件Action增加处理程序(即通过ActionEventHandler这个delegate来调用Form1_Action)

        }



        private void Form1_Action(object sender, ActionCancelEventArgs ev) //这里的方法签名必须与ActionEventHandler的声明签名相同

        {

            ev.Cancel = DoAction();//调用DoAction,根据当前时间是否超过30秒,决定是否取消事件(小于30秒取消,反之继续)

            if (ev.Cancel) 

            {

                ev.Message = "当前时间小于30秒,事件被取消"; //如果取消,设置ev的Message属性  

            }

        }



        /// <summary>

        /// 判断当前时间是否超过30秒

        /// </summary>

        /// <returns>小于30秒,返回true,反之返回false</returns>

        private bool DoAction() 

        {

            bool retVal = false;

            DateTime tm = DateTime.Now;



            if (tm.Second < 30)

            {

                _time = "";

                retVal = true;

            }

            else 

            {

                _time = "事件被触发于 " + DateTime.Now.ToLongTimeString();

            }



            return retVal;

        }



        /// <summary>

        /// 声明一个当前时间的属性

        /// </summary>

        public string TimeString 

        {

            get { return _time; }

        }



        protected void OnAction(object sender, ActionCancelEventArgs ev) 

        {

            if (Action!=null)//如果有人订阅了Action事件

            {

                Action(sender, ev);//则事件触发

            }

        }



        /// <summary>

        /// 通过按钮来激发事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnRaise_Click(object sender, EventArgs e)

        {

            ActionCancelEventArgs cancelEvent = new ActionCancelEventArgs();//生成一个ActionCancelEventArgs的实例

            OnAction(this, cancelEvent);//激发事件

            if (cancelEvent.Cancel)//如果事件被取消,则显示Message

            {

                lblInfo.Text = cancelEvent.Message;

            }

            else//反之显示当前时间

            {

                lblInfo.Text = this.TimeString;

            }

        }

    }



    public class ActionCancelEventArgs: CancelEventArgs 

    {

        string _msg = "";

        

        //定义一个Message属性

        public string Message 

        {

            get { return _msg; }

            set { _msg = value;}

        }



    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2007-12-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档