2009-07-15 66 views

回答

1

你的問題不清楚。假設您試圖在繼承的控件中處理基類的事件,您可以覆蓋On EventName受保護的虛擬方法。在覆蓋中,確保調用基本方法或事件不會觸發。

對於System.Windows.Forms中每個控件中的每個事件,此方法都存在(AFAIK)。如果您繼承的控件沒有此虛擬方法,則可以在構造函數中訂閱通風口。

例如:

class MyButton : Button { 
    //First way 
    protected override void OnClick(EventArgs e) { 
     base.OnClick(e); //Without this line, the event won't be fired 
     //... 
    } 


    //Second way 
    public MyButton() { 
     base.Click += Base_Click; 
    } 

    void Base_Click(object sender, EventArgs e) { 
     //... 
    } 
} 

編輯

如果你想養基類的事件,你可以調用這些在事件名稱方法。

如果基類沒有,那麼唯一的方法就是聲明一個新事件,並向引發新事件的基類中的原始事件添加一個處理程序。請注意,如果您有其他代碼使用基類的事件,並且evnet不是virtual,並且沒有提升方法,那麼您運氣不佳,除非您可以反編譯基類並找出事件的位置被提出。

1

WinForms中的事件通常具有相應的「On *」方法。只需調用該方法,它就會引發事件。例如,如果您想舉起「CellClick」,請調用「base.OnCellClick(new DataGridViewCellEventArgs(row,column))」。

+0

+1,因爲這是我正在尋找的答案。 – 2013-08-19 10:49:28

相關問題