2012-03-14 29 views
1

MDI親フォームに保存ボタンがあり、ユーザーがこのボタンをクリックするたびにアクティブなMDI子フォームでいくつかのメソッドを呼び出す必要があります。親からmdi子メソッドを呼び出す

変数にactivemdichild.nameが格納されているとします。

string name = this.ActiveMdiChild.Name.ToString(); 

すべてのMDI子フォームには保存メソッドがあります。

public void SaveForm() 
{ 
//Some code here 
} 

SaveFormメソッドをプログラムで呼び出す方法を教えてください。

これはベストプラクティスではない場合は、何をお勧めしますか? MDIフォームの子のタイプを想定し

+0

MDIフォームの種類は何ですか? – JaredPar

+0

「タイプ」とはどういう意味ですか?パブリック部分クラスEmpresasView:フォーム、IEmpresas ?? –

+0

それは私が探していたものです。私は私の答えを更新します – JaredPar

答えて

2

はあなたの子フォームはあなたのMDI子供が実現することを期待ものの種類を定義するインタフェースを実装することについて、次の

foreach (var form in MdiChildren) { 
    var view = form as IEmpresas; 
    if (view != null) { 
    view.SaveForm(); 
    } 
} 
+0

あなたの答えをありがとうJared、ちょうど1つの質問、私はすでにActiveMdiChildを知っていた場合、子供を反復する必要は何ですか? –

+0

@JorgeZapata私はあなたの質問のタイトルを外していました。アクティブなものを保存したいだけなら、 'ActiveMdiChild'の値でループの内部の本体を行うことができます – JaredPar

2

何ができるMyMdiFormです。

のような:

あなたのMDI親フォームで次に
IChildWindow 
{ 
    void Save() 
} 

public class MyChildClass : IChildWindow 
{ 
    public void Save() 
    { 
    } 
} 

foreach (var child in MdiChildren) 
{ 
    var childAsIWindow = child as IChildWindow; 
    if (childAsIWindow == null) throw new InvalidOperationException("Not a IChildWindow"); 
    // or you could just ignore them. 

childAsIWindow.Save(); 
} 
+0

フォームが既にIEmpresasを実装していることに気付かず、そのインターフェースがSaveメソッドを定義していますか? – quip

+0

はい、IEmpresasにはSaveFormメソッドがあります –

関連する問題