只是一些代码,可也简单说明了自定义控件中的自定义事件的定义和使用
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
//一个简单的应用用户自定义事件的用户自定义控件
namespace CustomComponents

{
[
DefaultEvent("ClickNext"), //元数据 定义默认事件
DefaultProperty("NextText") //元数据 定义默认属性
]
public class NavButtons1 :Control, IPostBackEventHandler //很重要一定要继承IPostBackEventHandler
{ //只有继承了这个接口才可以回传事件

事件部分#region 事件部分
private static readonly object EventClickNiu = new object();
//声明一个代理
public delegate void NiuEventHandler(object sender, NiuEventArgs e);
//声明事件
public event NiuEventHandler Niu
{
add
{
Events.AddHandler(EventClickNiu, value);
}
remove
{
Events.RemoveHandler(EventClickNiu, value);
}
}
protected virtual void OnM(NiuEventArgs e)
{
NiuEventHandler niuEventHandler = (NiuEventHandler)Events[EventClickNiu];
if (niuEventHandler != null)
niuEventHandler(this, e);
}
#endregion

声明属性#region 声明属性
[
Bindable(true),
Category("Behavior"),
DefaultValue(""),
Description("The text to display on the Next button")
]
public virtual string NextText
{
get
{
//利用ViewState保存状态
string s = (string)ViewState["NextText"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["NextText"] = value;
}
}
[
Bindable(true),
Category("Behavior"),
DefaultValue(""),
Description("The text to display on the middle button")
]
public virtual string MiddleText
{
get
{
return(ViewState["middleText"] == null)?string.Empty: (string)ViewState["middleText"];
}
set
{
ViewState["middleText"] = value;
}
}
[
Bindable(true),
Category("Behavior"),
DefaultValue(""),
Description("The text to display on the Previous button")
]
public virtual string PreviousText
{
get
{
string s = (string)ViewState["PreviousText"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["PreviousText"] = value;
}
}
#endregion

回传事件,生成控件#region 回传事件,生成控件
[
Category("Action"),
Description("Raised when the Next button is clicked")
]
//回传事件 并根据回传参数判断客户到底点击了那个按钮
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
if (eventArgument == "Previous")
{
NiuEventArgs e = new NiuEventArgs(eventArgument);
OnM(e);
PreviousText = "你点击了PreviousText按钮";
}
else if (eventArgument == "Next")
{
NiuEventArgs e = new NiuEventArgs(eventArgument);
OnM(e);
NextText = "你点击了NextText按钮";
}
else if (eventArgument == "Middle")
{
NiuEventArgs e = new NiuEventArgs(eventArgument);
OnM(e);
MiddleText = "你点击了MiddleText按钮";
}
}
//使用Render方法生成控件,如果是继承自WebControl最后使用RenderContent()方法
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.GetPostBackEventReference(this, "Previous"));
writer.AddAttribute(HtmlTextWriterAttribute.Name, "NextButton");
writer.RenderBeginTag(HtmlTextWriterTag.Button);
writer.Write(this.PreviousText);
writer.RenderEndTag();
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.GetPostBackEventReference(this,"Middle"));
writer.RenderBeginTag(HtmlTextWriterTag.Button);
writer.Write(MiddleText);
writer.RenderEndTag();
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.GetPostBackEventReference(this, "Next"));
writer.RenderBeginTag(HtmlTextWriterTag.Button);
writer.Write(this.NextText);
writer.RenderEndTag();
}
#endregion
}

定义一个用户自定义事件参数#region 定义一个用户自定义事件参数
public class NiuEventArgs : EventArgs
{
private string btnName;
public NiuEventArgs(string name)
{
btnName = name;
}
public string Name
{
get
{
return btnName;
}
}
}
#endregion
}

浙公网安备 33010602011771号