2017-08-01 7 views
0

Formを継承するフォームFormAがあります。次のように私はOnLoadを上書き:私は、同じフォームレイアウトを持つように派生フォームから基本フォームを戻す方法は?

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

    //Do FormA stuff here    
} 

は、今私はFormAから2番目のフォームFormB導き出します。しかし、私はまた、OnLoadを上書きしたいが、私がしなければ、この:

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

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

それは私が望んでいないFormA's OnLoadを呼び出します。

このシナリオでは、Form OnloadイベントをFormBから呼び出すにはどうすればよいですか。

+4

FormAを拡張しないでください。代わりにフォームを拡張してください。または、ベース実装を呼び出すことができる両方の共通の基本クラスを作成します。継承は、直接基底クラスからのいくつかのものと、基底クラスからさらに上の階層へのいくつかのものを必要とするものにとっては、貧弱なモデルです。 – Joey

+0

フォームAの読み込み時に、フォームAのデータの初期化がトリガされるので、フォームBを作成するときには必要ありません。 – Ramankingdom

答えて

1

このコードは使用できません。たとえば、base.base.OnLoadと言うことはできません。

私はこのようなことをしたいと思います。

フォームA

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)への呼び出しを削除できます。しかし、データバインディングのようなコントロールを操作する処理があれば、私は強くアドバイスします。

ビジュアル継承ではあまり使用されません。一般的な機能をユーザーコントロールにリファクタリングして、それを他のフォームから継承するのではなく、両方のフォームに追加するほうがよいです。

関連する問題