ASP.net组件编程中的两种事件编写方法 ,转

以下是组件代码:

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

namespace NSEventStudy

{

public delegate void TwoEventHandle(int flag);

public class EventStudy : System.Web.UI.WebControls.WebControl

{

///////////////第一种定义事件的方法////////////////////

public event TwoEventHandle TwoEvent;

public void Execute(int flag)

{

TwoEvent(flag);

}

////////////////第二种定义事件的方法////////////////////

private static object _Process = new object();

public event TwoEventHandle ThreeEvent

{

add

{

Events.AddHandler(_Process,value);

}

remove

{

Events.RemoveHandler(_Process,value);

}

}

public void InnerExecute(int flag)

{

TwoEventHandle handle = (TwoEventHandle)Events[_Process];

if(handle != null)

{

handle(flag);

}

else

{

this.RaiseBubbleEvent(this,null);

}

}

protected override void Render(HtmlTextWriter writer)

{

base.Render (writer);

writer.WriteLine("我爱你,中国");

}

}

}

测试程序:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

namespace TestEvent

{

/// <summary>

/// WebForm1 的摘要说明。

/// </summary>

public class WebForm1 : System.Web.UI.Page

{

protected System.Web.UI.WebControls.Button Button1;

protected NSEventStudy.EventStudy EventStudy1;

private void Page_Load(object sender, System.EventArgs e)

{

// 在此处放置用户代码以初始化页面

}

#region Web 窗体设计器生成的代码

override protected void OnInit(EventArgs e)

{

//

// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

//

InitializeComponent();

base.OnInit(e);

}

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.EventStudy1.ThreeEvent += new NSEventStudy.TwoEventHandle(this.EventStudy1_ThreeEvent);

this.EventStudy1.TwoEvent += new NSEventStudy.TwoEventHandle(this.EventStudy1_TwoEvent);

this.Button1.Click += new System.EventHandler(this.Button1_Click);

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

private void EventStudy1_TwoEvent(int flag)

{

this.Response.Write("<script>javascript:alert('TwoEvent事件触发')</script>");

}

private void EventStudy1_ThreeEvent(int flag)

{

this.Response.Write("<script>javascript:alert('ThreeEvent事件触发')</script>");

}

private void Button1_Click(object sender, System.EventArgs e)

{

this.EventStudy1.Execute(6);

this.EventStudy1.InnerExecute(10);

}

}

}



原文转:http://blog.csdn.net/lizanhong/archive/2004/10/16/138755.aspx