关于事件委托!!!
http://community.csdn.net/Expert/topic/4811/4811871.xml?temp=.8033869
在用户控件中有两个按钮,一个‘提交’,另一个‘取消’...
在点击这个‘提交’后,用户控件完成一些自身的操作,但却无法对调用它的父页面进行操作,比如:提交后,把父页面上的Lable显示为另外一个文本。
(就算可以做到这点,但用户控件永远无法预知父页面的具体情况,比如这个Lable的ID会是什么?)
我用了事件委托(不知道这个算不算是...):
-------用户控件.cs--------
private static readonly object EventClick1;
protected System.Web.UI.WebControls.Button Button1;
private static readonly object EventClick2;
protected System.Web.UI.WebControls.Button Button2;
public event EventHandler Click1 //‘提交’
{
add
{
base.Events.AddHandler(WebUserControl1.EventClick1,value);
}
remove
{
base.Events.RemoveHandler(WebUserControl1.EventClick1,value);
}
}
public event EventHandler Click2 //‘取消’
{
add
{
base.Events.AddHandler(WebUserControl1.EventClick2,value);
}
remove
{
base.Events.RemoveHandler(WebUserControl1.EventClick2,value);
}
}
private void Button1_Click(object sender, System.EventArgs e) //‘提交’事件函数
{
//.....某些操作......//
EventHandler handler1 = (EventHandler) base.Events[EventClick];
if(handler1!=null)
{
handler1(this,e);
}
}
private void Button2_Click(object sender, System.EventArgs e) //‘取消’事件函数
{
//.....某些操作......//
EventHandler handler2 = (EventHandler) base.Events[EventClick2];
if(handler2!=null)
{
handler2(this,e);
}
}
-------父页面.cs--------
1、在Page_Load事件中加 (不进行IsPostBack属性的检测):
用户控件的类名 wb = (用户控件的类名)Page.FindControl("myeditc"); //用户控件
if(wb!=null)
{
wb.Click+=new EventHandler(wb_Click);
wb.Click2+=new EventHandler(wb_Click2);
}
2、写这两个事件函数:
private void wb_Click(object sender, EventArgs e) //提交
{
this.Page.Response.Write("<script>alert('您选择了确定!');</script>");
//再做一些别的什么...
}
private void wb_Click2(object sender, EventArgs e) //取消
{
this.Page.Response.Write("<script>alert('您选择了取消!');</script>");
//再做一些别的什么...
}
===============================================
测试后,发现:
不管是点‘提交’还是‘取消’,两个事件函数都被执行过...
先提示:“您选择了确定!”
接着又提示:“您选择了取消!”
其他没问题...
不知道应该怎么让它们各自执行各的事件?
望高人请教!!!
谢谢!!!