2009-05-28 60 views
2

我有一個從另一個表單繼承的winforms表單。Form_Load事件不是從另一個表單類繼承的表單上觸發

例如

class StartForm : aSyncDialog 

aSyncDialog有onload事件

protected override void OnLoad(EventArgs e) 

我注意到,在StartForm Load事件不點火,但在onload之一。

private void StartForm_Load(object sender, EventArgs e) 

任何想法爲什麼?有什麼我需要放入父或子類來讓它運行?

回答

4

確保你從你的OnLoad的倍率,aSyncDialog

調用base.OnLoad(E)這樣做的原因是,在窗體類的OnLoad方法引發Load事件。

當您覆蓋aSyncDialog中的OnLoad方法並且不調用base.OnLoad時,則不會引發事件,因此aSyncDialog的子類沒有任何要處理的事件。

+1

其實這是base.OnLoad(e)在C# – 2009-05-28 16:21:46

2

在System.Windows.Form類中,方法OnLoad實際上是調用所有掛接到Load事件的事件處理程序。由於您重寫了OnLoad的實現,所以事件處理程序永遠不會被調用(在您的情況下爲StartForm_Load)。

爲了使這個工作正確,你需要像Patrick所說的那樣調用Base.OnLoad。作爲慣例,除非你知道你特別不希望基本方法運行,否則在覆蓋時應始終調用基本方法。