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

简介:   1using System;  2using System.ComponentModel;  3using System.Windows.Forms;  4  5namespace WindowsFormsApplication1  6{  7    public partial cla...

 

  1 using  System;
  2 using  System.ComponentModel;
  3 using  System.Windows.Forms;
  4
  5 namespace  WindowsFormsApplication1
  6 {
  7    public partial class Form1 : Form
  8    {
  9        public delegate void ActionEventHandler(object sender, ActionCancelEventArgs ev);//声明一个delegate
 10        public static event ActionEventHandler Action;//声明一个名为Action的事件
 11
 12        string _time = "";
 13
 14        public Form1()
 15        {
 16            InitializeComponent();
 17            Form1.Action += new ActionEventHandler(Form1_Action);//为事件Action增加处理程序(即通过ActionEventHandler这个delegate来调用Form1_Action)
 18        }

 19
 20        private void Form1_Action(object sender, ActionCancelEventArgs ev) //这里的方法签名必须与ActionEventHandler的声明签名相同
 21        {
 22            ev.Cancel = DoAction();//调用DoAction,根据当前时间是否超过30秒,决定是否取消事件(小于30秒取消,反之继续)
 23            if (ev.Cancel) 
 24            {
 25                ev.Message = "当前时间小于30秒,事件被取消"//如果取消,设置ev的Message属性  
 26            }

 27        }

 28
 29        /**//// <summary>
 30        /// 判断当前时间是否超过30秒
 31        /// </summary>
 32        /// <returns>小于30秒,返回true,反之返回false</returns>

 33        private bool DoAction() 
 34        {
 35            bool retVal = false;
 36            DateTime tm = DateTime.Now;
 37
 38            if (tm.Second < 30)
 39            {
 40                _time = "";
 41                retVal = true;
 42            }

 43            else 
 44            {
 45                _time = "事件被触发于 " + DateTime.Now.ToLongTimeString();
 46            }

 47
 48            return retVal;
 49        }

 50
 51        /**//// <summary>
 52        /// 声明一个当前时间的属性
 53        /// </summary>

 54        public string TimeString 
 55        {
 56            get return _time; }
 57        }

 58
 59        protected void OnAction(object sender, ActionCancelEventArgs ev) 
 60        {
 61            if (Action!=null)//如果有人订阅了Action事件
 62            {
 63                Action(sender, ev);//则事件触发
 64            }

 65        }

 66
 67        /**//// <summary>
 68        /// 通过按钮来激发事件
 69        /// </summary>
 70        /// <param name="sender"></param>
 71        /// <param name="e"></param>

 72        private void btnRaise_Click(object sender, EventArgs e)
 73        {
 74            ActionCancelEventArgs cancelEvent = new ActionCancelEventArgs();//生成一个ActionCancelEventArgs的实例
 75            OnAction(this, cancelEvent);//激发事件
 76            if (cancelEvent.Cancel)//如果事件被取消,则显示Message
 77            {
 78                lblInfo.Text = cancelEvent.Message;
 79            }

 80            else//反之显示当前时间
 81            {
 82                lblInfo.Text = this.TimeString;
 83            }

 84        }

 85    }

 86
 87    public class ActionCancelEventArgs: CancelEventArgs 
 88    {
 89        string _msg = "";
 90        
 91        //定义一个Message属性
 92        public string Message 
 93        {
 94            get return _msg; }
 95            set { _msg = value;}
 96        }

 97
 98    }

 99}

100
目录
相关文章
|
5月前
|
C#
C#||委托和事件的实例
C#||委托和事件的实例
|
小程序
小程序--event对象
小程序--event对象
419 0
小程序--event对象
c#编程:事件delegate学习笔记-3
c#编程:事件delegate学习笔记-3
124 0
|
JavaScript
48、Event 对象
事件发生以后,会产生一个事件对象,作为参数传给监听函数。浏览器原生提供一个Event对象,所有的事件都是这个对象的实例,或者说继承了Event.prototype对象。
106 0
|
C#
C# 从1到Core--委托与事件(三)
委托与事件在C#1.0的时候就有了,随着C#版本的不断更新,有些写法和功能也在不断改变。本文温故一下这些改变,以及在NET Core中关于事件的一点改变。
165 0
|
C#
C# 从1到Core--委托与事件(一)
 委托与事件在C#1.0的时候就有了,随着C#版本的不断更新,有些写法和功能也在不断改变。本文温故一下这些改变,以及在NET Core中关于事件的一点改变。
205 0
|
C#
C# 从1到Core--委托与事件(二)
 委托与事件在C#1.0的时候就有了,随着C#版本的不断更新,有些写法和功能也在不断改变。本文温故一下这些改变,以及在NET Core中关于事件的一点改变。
174 0