关于事件委托!!!
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>");
//再做一些别的什么...
}
===============================================
测试后,发现:
不管是点‘提交’还是‘取消’,两个事件函数都被执行过...
先提示:“您选择了确定!”
接着又提示:“您选择了取消!”
其他没问题...
不知道应该怎么让它们各自执行各的事件?
望高人请教!!!
谢谢!!!
在用户控件中有两个按钮,一个‘提交’,另一个‘取消’...
在点击这个‘提交’后,用户控件完成一些自身的操作,但却无法对调用它的父页面进行操作,比如:提交后,把父页面上的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>");
//再做一些别的什么...
}
===============================================
测试后,发现:
不管是点‘提交’还是‘取消’,两个事件函数都被执行过...
先提示:“您选择了确定!”
接着又提示:“您选择了取消!”
其他没问题...
不知道应该怎么让它们各自执行各的事件?
望高人请教!!!
谢谢!!!
...全文
相关推荐
C#中委托与事件的区别
如果未来要支持新的语言,只需定义新的问候方法并传递即可,无需修改现有的委托签名。与委托紧密相关的是.NET中的事件。事件是一种特殊的多播委托,它封装了委托的调用细节,是委托的进一步封装。
C# 委托与事件的概念及理解
当你对委托实例化时,要提供一个对象方法(引用函数),将其作为它构造函数的参数。这里要注意了:被引用的这个函数必须和委托有相同的签名。事件是 C# 中另一个非常重要的概念,事件是委托类型的变量。
C#中事件委托订阅发布模式
通过使用委托,我们可以将方法作为参数传递,或者将方法存储在变量中,这为事件处理提供了基础。事件通常与委托一起使用,遵循一种称为订阅-发布模式的编程范式。
C#中委托和事件的区别实例解析
事件是委托的封装,它提供了一种安全的方式来订阅和取消订阅方法,以响应特定的事件。事件可以理解为委托类型的私有变量,外部只能通过添加或移除事件处理程序(即注册和取消注册)来操作,而不能直接访问委托。
winform委托和事件经典例子
为此,我们可以在子窗口定义一个自定义事件,使用委托来定义事件处理程序的签名。


