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

时间:2022-04-23
本文章向大家介绍event & delegate Demo(事件&委托示例),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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;}

        }



    }

}