高深的委托链问题!求高手、专家解决
前提:目前使用的是VS2003,FrameWork1.11.比如在某个窗体Form1里放置了一个按钮Button1,
2.并在窗体里对按钮的Click事件编写了代码: Sub Button1_Click(...) handles Button1.Click
3.在另外一个窗体Form2使用这个窗体:dim form as new Form1
4.使用方法:我想在Button1现有绑定的处理(即Button1_Click)前再增加绑定一个处理函数;也就是Button1.Click事件先进入我新绑定的函数,然后再进入原Form1.Button1_Click函数
5.重点问题:我在Form2中并不知道Button1.Click绑定的函数叫做Button1_Click,也就是不能用
RemoveHandler Form1.Button1.Click Addressof Form1.Button1_Click
AddHandler Form1.Button1.Click Addressof MyNewClickDeal
AddHandler Form1.Button1.Click Addressof Form1.Button1_Click
因为我不知道Form1.Button1.Click绑定的函数叫做Form1.Button1_Click!
问题1:请问在这种情况下我如何将新的函数MyNewClickDeal加入到Form1.Button1.Click原处理函数之前
6.如果Button1.Click绑定了两个处理函数,我想在第一个处理函数中进行一个检测,如果失败,则不允许继续执行下一个处理函数。
问题2:如何实现?
如果使用VS2005,FrameWork2.0能实现以上功能吗? --------------------编程问答-------------------- 为什么不放在同一个处理函数呢 --------------------编程问答-------------------- 你把控件的modifiers 這個屬性座成public 這樣你就能在別的畫面訪問了!!
都在一起的畫面,你不知道按钮的方法id??,方法又不是动态创建的 --------------------编程问答-------------------- 看不明白这样实现的目的,不知道能不能把MyNewClickDeal的处理放Form1.Button1_Click 中 --------------------编程问答-------------------- HOW TO:以事件名称与方法名称为参数的事件关联
http://blog.csdn.net/lzmtw/archive/2006/08/02/1010980.aspx --------------------编程问答-------------------- 你可以像http://blog.csdn.net/lzmtw/archive/2006/08/02/1010980.aspx一样从Form1 传方法名称过来吧 --------------------编程问答-------------------- 5.重点问题:我在Form2中并不知道Button1.Click绑定的函数叫做Button1_Click,也就是不能用
以上这个问题在05中很好解决,声明一个接口包含方法Button1_Click,
然后用泛型类要求class Form1实现该接口,这样就可以在类Form2中随意调用Button1_Click这个方法了。 --------------------编程问答-------------------- 03的话可以用反射解决...
缺点就是反射的代价高,效率低 --------------------编程问答-------------------- 这么做根本毫意义,无需使用2个事件啊,同一个操作触发2个事件和一个事件有什么分别? --------------------编程问答-------------------- 呵呵,楼主可能是想封装某些东西,让外部看起来更为简洁
楼主需要的一种功能是从事件中取出委托,从事件中移除委托
但这些只能用反射实现,而且并不方便,中间有个东西涉及强制转换,还需要了解委托的结构 --------------------编程问答-------------------- 在Form1添加一个新的事件:
public event MyPreClickEventHandler PreClick;
public void Button1_Click(object sender, ....){
PreClick(...);
}
在Form2中处理这个PreClick事件:
Form2(..){
...
....
..
form1.PreClick+=new MyPreClickEventHandler(....);
}
--------------------编程问答-------------------- 为什么我要这样实现:
1.我有很多FORM,每个FORM里有很多功能Button,功能有打开子窗体或者是进行DB处理的;
2.现在每个FORM在初始化的时候都会执行一个共通的处理函数;
3.我想在这个共通处理函数中,对每个功能Button都增加一个处理方法MyNewClickDeal;
4.在这个函数里,我想进行一些判断,如果成功,则继续执行原先的Button.Click事件处理,否则就不执行原来的处理
我现在就是不想把所有的窗口里的Button.Click事件都改一遍,把MyNewClickDeal加进去!
这样程序会更简洁,而且此方法可以扩展到对其他一些事件的共通检查 --------------------编程问答-------------------- 调用的Button.PerformClick方法,可以触发它关联的Click事件
--------------------编程问答-------------------- 接分先! --------------------编程问答-------------------- 对的,我现在就是不知道如何获取FORM1中传来的绑定在Button1.Click事件上的方法名。如果有办法取得就OK了!
补充:.NET技术 , VB.NET