你的位置:首页 > ASP.net教程

[ASP.net教程]C#和ASP.NET之事件


  事件是一种用于类和类之间传递消息或触发新的行为的编程方式。通过提供事件的句柄,能够把控件和可执行的代码联系在一起,

如用户单击Button控件触发Click事件后就执行相应的事件处理代码。

  事件的声明通过委托来实现。先定义委托,再用委托定义事件,触发事件的过程实质是调用委托。事件声明语法格式如下:

public delegate void EventHandler(object sender,EventArgs e);//定义委托

public event EventHandler MyEvent;//定义事件

  EventHandler委托定义了两个参数,分别属于object类型和EventArgs类型。如果需要更多参数,可以通过派生EventArgs类实现。

sender表示触发事件的对象,e用于在事件中传递参数。例如,若用户单击Button按钮,则sender表示Button按钮,e表示Click时间参数。

  MyEvent事件使用EventHandler委托定义,其中使用了public修饰符,也可以使用private,protected等修饰符。

 

实例:在AccountEvent类中增加账户金额不足事件并运用事件

AccountEvent类的定义:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5  6  7 public class AccountEvent 8 { 9   private string _ID;10   private string _Name;11   private decimal _Balance;12   //定义Overdraw事件13   public event EventHandler Overdraw;14   public void OnOverDraw(object sender, EventArgs e)15   {16     if (Overdraw != null)17     {18       Overdraw(this,e);19 20     }21   }22   //存款方法23   public void Deposit(decimal amount)24   {25     //先检查存款的金额是否大于026     if (amount > 0)27     {28       _Balance += amount;29     }30     else31     {32       throw new Exception("存款的金额不能小于等于0!!");33     }34   }35   //取款方法36   //并在此方法中加入触发事件的代码37   public void Acquire(decimal amount)38   {39     if (amount < _Balance)40     {41       _Balance -= amount;42     }43     else44     {45       OnOverDraw(this, EventArgs.Empty);46       return;47     }48   }49  50   public string ID51   {52     get { return _ID; }53     set { _ID = value; }54   }55   public string Name56   {57     get { return _Name; }58     set { _Name = value; }59   }60   public decimal Balance61   {62     get { return _Balance; }63     set { _Balance = value; }64   }65   //构造方法66   public AccountEvent(string id,string name,decimal balance)67   {68     _ID = id;69     _Name = name;70     _Balance = balance;71 72   }73  74   75 }

 

至此,已经声明了事件并增加了事件触发点。但若要在ASP.NET页面上使用事件,还需要使用运算符“+=”注册事件,并要编写事件处理代码。

下面是如何运用Overdraw事件。

AccountEventPage.aspx.cs的代码:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7  8 public partial class Chap3_AccountEventPage : System.Web.UI.Page 9 {10   protected void Page_Load(object sender, EventArgs e)11   {12     AccountEvent accountEvent = new AccountEvent("03012", "李明", 200);//建立AccountEvent对象,账户初始金额为20013     //注册Overdraw事件14     accountEvent.Overdraw += new EventHandler(account_OverDraw);15     accountEvent.Acquire(400);//取款40016 17   }18   //Overdraw事件处理代码19   private void account_OverDraw(object sender, EventArgs e)20   {21     Response.Write("账户金额不足了!!!");22   }23 }

 

浏览AccountEventPage.aspx呈现界面如下:

 

程序说明:

当程序执行“account.Acquire(400);”时,因为对账户的取款金额大于账户金额,会执行Acquire方法中if语句的else部分,将触发事件Overdraw;再执行account_Overdraw()方法,输出信息“账户金额不足了!!!”。

 

此例子中事件运用的步骤为:

1.定义事件。

2.设置事件的触发点。

3.使用运算符“+=”注册事件。

4.编写事件处理代码。

其中1、2两步是在类的定义中完成的,3、4步是在aspx文件中完成的的。