日期:2014-05-17  浏览次数:20765 次

Click事件方法的执行顺序请教
1.有一个有总供有4层继承关系的Form:UserForm->ThiDForm->SecondForm->BaseForm
2.BaseForm是最底层的Form,在该Form上面定义了一个按钮,
3.在ThiDForm和SecondForm,根据一定的规则用代码的方式给这按钮的click事件订阅一些方法(依据具体封装逻辑,订阅方法的个数是不确定的,从0-3个都有)。
4.然后我在UserForm层,给该按钮订阅了一个用户层面的方法method(XXX)。

现在的问题:点击该按钮的时候,当我在method(XXX)方法里面抛出了异常,但系统还是把挂在该按钮click事件上面的其他方法给执行了。

我希望实现的效果:能否给该按钮click事件的各方法指定执行顺序。
比如有method(XXX),在method1(XXX),在method2(XXX)挂到按钮click事件上,我希望依次执行method、method1、method2方法,一旦我在method方法抛出异常,后面2个方法就不在执行


------解决方案--------------------
你既然定义了继承的类就应该 override OnClick 方法, 然后在OnClick方法中做自己想做的事情
protected override OnClick(EventArgs e)
{
...
base.OnClick(e);
...
}

------解决方案--------------------
把 BaseForm 上按钮事件的方法加上 Virtual 修饰,SecondForm,ThiDForm,UserForm,依次 override 这个事件的方法,
C# code
// BaseForm 上
protected virtual void button1_Click(object sender, EventArgs e)
{
    // ......
}

//其他 Form
protected override void button1_Click(object sender, EventArgs e)
{
    // ......
    base.button1_Click(sender, e);
}

------解决方案--------------------
1楼意思是对的。。。可惜form上的按钮点击跟override OnClick(EventArgs e)貌似没任何关系吧,你这个重写的是form的click事件
还是2楼的写法,只要在BaseForm注册一次按钮点击事件就可以了。。。