《C#高级编程》(第4版)6.3.2:事件和委托

 《C#高级编程》(第4版)6.3.2:事件和委托

Form1.cs

在Form1上放置button1和label1控件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace EventTest2
{
    public partial class Form1 : Form
    {
       //创建委托和相应事件

        public delegate void ActionEventHandler(object sender, ActionCancelEventArgs e);
        public static event ActionEventHandler Action;

        BusEntity be;
        ActionCancelEventArgs cancelEvent;

        public Form1()
        {
            InitializeComponent();
            be = new BusEntity();
            cancelEvent = new ActionCancelEventArgs();
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
         
            OnAction(this, cancelEvent);          

            if (cancelEvent.Cancel)
                label1.Text = cancelEvent.Message;
            else
                label1.Text = be.TimeString;
        }

        protected void OnAction(object sender, ActionCancelEventArgs e)
        {
            if(Action!=null)
                Action(sender, e);
        }
    }

    //创建自定义的ActionCancelEventArgs类

    public class ActionCancelEventArgs : System.ComponentModel.CancelEventArgs
    {
        string msg = "";
       
        public ActionCancelEventArgs():base(){}
       
        public ActionCancelEventArgs(bool cancel):base(cancel){}
       
        public ActionCancelEventArgs(bool cancel, string message) : base(cancel)
        {
            this.msg = message;
        }

        public string Message
        {
            get
            {
                return msg;
            }
            set
            {
                msg = value;
            }
        }
    }

 

BusEntity.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace EventTest2
{
    public class BusEntity
    {
        string _time = "";

        public BusEntity()
        {
          
            Form1.Action += new Form1.ActionEventHandler(Form1_Action);
        }

        private void Form1_Action(object sender, ActionCancelEventArgs e)
        {
            e.Cancel = !DoAction();
            if (e.Cancel)
                e.Message = "Wasn't the right time";
        }

        private bool DoAction()
        {
            bool retVal = false;
            DateTime tm = DateTime.Now;

            if (tm.Second < 30)
            {
                _time = "The time is" + DateTime.Now.ToLongTimeString();
                retVal = true;
            }
            else
                _time = "aaa";

            return retVal;
        }

        public string TimeString
        {
            get { return _time; }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值