技术开发 频道

使用.NET自定义事件方法

 使用.NET自定义事件方法:

 1.定义委托   ——   事件需要的委托

 注意:事件中的委托必须含有sender和Args这两个参数,其中Args参数需要从EventArgs继承。

public   delegate   void   EventDelegate(object   sender,EventArgs   e)

 

 2.使用委托定义事件

public   Event   EventDelegate   OnEventHappen;

  3.在相应方法中触发事件

注:在类常定义protected   OnEventName(EventArgs)方法来引发事件。

 相应条件if(OnEventHappen   !=null   )   //当注册的处理事件的方法不为空时执行

 OnEventHappen(this,new   EventArgs(…))//调用事件

 …该事件会自动调用它目前引用的任何方法

 public delegate void MyEventHandler(object sender, EventArgs e);

 public  event MyEventHandler MyEvent;

 public void onMyEvent(object sender,EventArgs e)

 {

 if(MyEvent!=null)

 {

 MyEvent(sender, e);   //调用事件

 }

 }

  4.在别的类中使用相应的委托

 className.EventName   +=   new   EventNameHandle(MethodName)

 其中:MethodName的定义附合委托的定义

 btn2.MyEvent+=new MyWebTest.Common.NewButton.MyEventHandler(btn2_MyEvent);

 一般把事件处理程序声明为proteted。事件处理程序通常是通过事件调用的,换言之,是运过委托调用的。它们不能直接调用,外部的类也看不到它们(注意外部的类看不到方法,如果委托有对该方法的引用,这些类仍可以通过委托调用该方法)。

 btn2.onMyEvent(btn2,e); //触发事件

 注意:事件执行流程:触发事件-->调用事件-->调用委托-->调用具体的处理方法。

 其实,就是要调用事件的具体处理方法,但是为了类型的安全性,才引入了委托,因为事件的发送器完全不知道事件的接收器是什么情况,不过,委托只是起一个中介的作用来保证安全的执行事件。

 实例:

 自定义事件类:

 view plaincopy to clipboardprint?

 using System;

 using System.Data;

 using System.Configuration;

 using System.Linq;

 using System.Web;

 using System.Web.Security;

 using System.Web.UI;

 using System.Web.UI.HtmlControls;

 using System.Web.UI.WebControls;

 using System.Web.UI.WebControls.WebParts;

 using System.Xml.Linq;

 namespace MyWebTest.Common

 {

 public class NewButton:Button

 {

 public delegate void MyEventHandler(object sender, EventArgs e);//声明委托

 public  event MyEventHandler MyEvent;     //声明事件

 public void onMyEvent(object sender,EventArgs e)//触发事件的方法

 {

 if(MyEvent!=null)

 {

 MyEvent(sender, e);   //调用事件

 }

 }

 }

 }

 使用自定义事件的客户端:

 view plaincopy to clipboardprint?

 using System;

 using System.Collections;

 using System.Configuration;

 using System.Data;

 using System.Linq;

 using System.Web;

 using System.Web.Security;

 using System.Web.UI;

 using System.Web.UI.HtmlControls;

 using System.Web.UI.WebControls;

 using System.Web.UI.WebControls.WebParts;

 using System.Xml.Linq;

 namespace MyWebTest

 {

 public partial class EventWeb : System.Web.UI.Page

 {

 protected void Page_Load(object sender, EventArgs e)

 {

 MyWebTest.Common.NewButton btn2 = new MyWebTest.Common.NewButton();

 btn2.ID = "btn2";

 btn2.Text = "btn2";

 btn2.Visible = true;

 btn2.Width = 50;

 btn2.Height = 25;

 EventArgs ee = new EventArgs();

 btn2.MyEvent+=new MyWebTest.Common.NewButton.MyEventHandler(btn2_MyEvent);

 form1.Controls.Add(btn2);

 btn2.onMyEvent(btn2,e); //使用触发事件方法,触发事件 。

 }

 protected void btn2_MyEvent(object sender, EventArgs e)

 {

 Response.Write("<br/>");

 Response.Write("Good Morning!");

 Response.Write(((Button)sender).ID.ToString());

 }

 }

 }

查看原文地址

0
相关文章