Visual studio 2008 子代UserControl如何拦截其基类触发的事件?

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.cs),上面有一个OK和Cancel按钮。单击按钮时,将触发一个事件。通常,其他UserControl对象从BaseControl继承。最后,子代UserControl对象被放置在WinForm上,在那里它们与单击Ok/Cancel按钮的事件挂钩

我的问题是:在子控件中,我想截取事件(运行一些验证)。如何连接(或截获)这些事件


谢谢。

您通常会创建一个
受保护的虚拟验证()
方法,该方法会在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”方法:即使子类忘记调用基方法,也会触发事件。我真的不知道一个好的方法来做到这一点,我相信大多数人忽视了这一准则