2017-08-01 71 views
0

我有一個從Form繼承的表格FormA。我重寫OnLoad如下:如何從派生形式返回基礎形式?

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    //Do FormA stuff here    
} 

現在我從FormA導出第二形式FormB,使我有相同的形式佈局。不過,我想也覆蓋OnLoad但如果我這樣做:

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    //Do FormB stuff here   
    //without doing FormA stuff  
} 

它稱之爲FormA's OnLoad我不想要的。

在這種情況下,如何從FormB內部調用Form Onload事件?

+4

如果你不想這樣做,不要擴展FormA;改爲擴展Form。或者爲你可以*調用基本實現的地方創建一個公共基類。繼承是您希望從直接基類一些事情和一些其他的東西,從基類進一步向上層次的東西是不良的模式。 – Joey

+0

,因爲在形式的負載功能,我覺得觸發器形式的數據的一些intialization你不想創建表單b當我是吧? – Ramankingdom

回答

1

您不能使用此代碼。例如,你不能說base.base.OnLoad

我想你想做這樣的事情。

備考

protected sealed override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    MyOnLoad(e); 
} 

protected virtual void MyOnLoad(EventArgs e) 
{ 
    // FormA onload 
} 

FormB

protected override void MyOnLoad(EventArgs e) 
{ 
    // FormB onload 
} 

在這裏,你力一直打電話Form.OnLoad,但你可以改變MyOnLoad每派生類中OnLoad行爲。

0

您可以刪除對base.OnLoad(e)的呼叫。但是,我強烈建議反對,如果有任何類型的處理操縱控件,如數據綁定。

視覺繼承沒有發現太大的用處,你是關重構公共功能到用戶的控制更好,並添加到兩種形式,而不是繼承從另一個。