Visual studio 2008 子代UserControl如何拦截其基类触发的事件?
我有一个基本用户控件(BaseControl.cs),上面有一个OK和Cancel按钮。单击按钮时,将触发一个事件。通常,其他UserControl对象从BaseControl继承。最后,子代UserControl对象被放置在WinForm上,在那里它们与单击Ok/Cancel按钮的事件挂钩 我的问题是:在子控件中,我想截取事件(运行一些验证)。如何连接(或截获)这些事件Visual studio 2008 子代UserControl如何拦截其基类触发的事件?,visual-studio-2008,inheritance,user-controls,Visual Studio 2008,Inheritance,User Controls,我有一个基本用户控件(BaseControl.cs),上面有一个OK和Cancel按钮。单击按钮时,将触发一个事件。通常,其他UserControl对象从BaseControl继承。最后,子代UserControl对象被放置在WinForm上,在那里它们与单击Ok/Cancel按钮的事件挂钩 我的问题是:在子控件中,我想截取事件(运行一些验证)。如何连接(或截获)这些事件 谢谢。您通常会创建一个受保护的虚拟验证()方法,该方法会在BaseControl的事件处理程序中调用。然后在子控件中,您将覆
谢谢。您通常会创建一个
受保护的虚拟验证()
方法,该方法会在BaseControl的事件处理程序中调用。然后在子控件中,您将覆盖验证()方法
下面是一些文档。实现事件的标准模式是使用虚拟的“OnXxx”方法,如下所示:
public event EventHandler OkClick;
protected virtual void OnOkClick(EventArgs e)
{
if (OkClick != null) OkClick(this, e);
}
protected override void OnOkClick(EventArgs e)
{
// do some stuff before the event is fired
base.OnOkClick(e);
// do some stuff after the event is fired
}
现在,每当您的基础控件想要触发“OkClick”事件时,它只需调用:
OnOkClick(EventArgs.Empty);
这意味着基本控件的后代可以像这样覆盖OnOkClick:
public event EventHandler OkClick;
protected virtual void OnOkClick(EventArgs e)
{
if (OkClick != null) OkClick(this, e);
}
protected override void OnOkClick(EventArgs e)
{
// do some stuff before the event is fired
base.OnOkClick(e);
// do some stuff after the event is fired
}
请注意,框架设计指南实际上指出,您应该以这样的方式实现“OnXxx”方法:即使子类忘记调用基方法,也会触发事件。我真的不知道一个好的方法来做到这一点,我相信大多数人忽视了这一准则