《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; }
}
}
}