我有一个基本UserControl(BaseControl.cs),上面有一个OK和Cancel按钮。单击按钮时,将触发事件。通常,其他UserControl对象继承自BaseControl。最后,将后代UserControl对象放在WinForm上,然后将它们挂钩到事件中以单击“确定/取消”按钮。
我的问题是:在后代控件中,我想拦截事件(运行一些验证)。如何挂钩(或拦截)这些事件?
感谢。
答案 0 :(得分:4)
实现事件的标准模式是使用虚拟的“OnXxx”方法,如下所示:
public event EventHandler OkClick;
protected virtual void OnOkClick(EventArgs e)
{
if (OkClick != null) OkClick(this, e);
}
现在,只要您的基本控件想要触发“OkClick”事件,它就会调用:
OnOkClick(EventArgs.Empty);
这意味着您的基本控件的后代可以覆盖OnOkClick,如下所示:
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”方法,即使后代类忘记调用基本方法也会触发事件。我真的不知道这样做的好办法,我相信大多数人都会忽视这个指南。
答案 1 :(得分:0)
您通常会创建一个protected virtual Validate()
方法,该方法在BaseControl的事件处理程序中调用。然后在DescendantControl中override
使用Validate()
方法。
以下是Inheritance的一些文档。