我有一個基地UserControl(BaseControl.cs),它有一個確定和取消按鈕。點擊按鈕時,會觸發一個事件。通常,其他UserControl對象從BaseControl繼承。最後,後代UserControl對象被放置在WinForm中,在那裏它們鉤入用於點擊Ok/Cancel按鈕的事件。後代UserControl如何攔截由其基類觸發的事件?
我的問題是這樣的:在後代控件中,我想攔截事件(運行一些驗證)。如何鉤住(或攔截)這些事件?
謝謝。
我有一個基地UserControl(BaseControl.cs),它有一個確定和取消按鈕。點擊按鈕時,會觸發一個事件。通常,其他UserControl對象從BaseControl繼承。最後,後代UserControl對象被放置在WinForm中,在那裏它們鉤入用於點擊Ok/Cancel按鈕的事件。後代UserControl如何攔截由其基類觸發的事件?
我的問題是這樣的:在後代控件中,我想攔截事件(運行一些驗證)。如何鉤住(或攔截)這些事件?
謝謝。
執行事件的標準模式是利用一個虛擬的「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」方法。我真的不知道這樣做的好方法,我相信大多數人會忽視這個指導方針。
您通常會創建一個protected virtual Validate()
方法,該方法在BaseControl的事件處理程序中調用。然後在DescendantControl中,你會使用override
的Validate()
方法。
以下是關於Inheritance的一些文檔。