使用.NET自定义事件方法:
1.定义委托 —— 事件需要的委托
注意:事件中的委托必须含有sender和Args这两个参数,其中Args参数需要从EventArgs继承。
2.使用委托定义事件
3.在相应方法中触发事件
相应条件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());
}
}
}