2012-03-14 171 views
1

我在MDI父窗體中有一個保存按鈕,每次用戶單擊此按鈕時,我想調用活動MDI子窗體中的某個方法。從父項調用mdi子方法

假設我將activemdichild.name存儲在變量中。

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

而我所有的MDI子窗體都有一個保存方法。

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

如何以編程方式調用SaveForm方法?

如果這不是最佳實踐,您有什麼建議?

+0

什麼的MDI形式的類型? – JaredPar 2012-03-14 23:16:23

+0

'type'是什麼意思?公共部分類EmpresasView:Form,IEmpresas? – 2012-03-14 23:18:31

+0

這就是我正在尋找的。我會更新我的答案 – JaredPar 2012-03-14 23:18:56

回答

2

假設MDI窗體孩子的類型是MyMdiForm你可以做以下

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

感謝您的回答Jared,只是一個問題,如果我已經知道ActiveMdiChild,那麼需要通過兒童進行迭代? – 2012-03-14 23:34:13

+0

@JorgeZapata我正在談論你的問題的標題。如果你只是想保存活動的那個,那麼你可以在'ActiveMdiChild'值 – JaredPar 2012-03-15 14:49:52

2

怎麼樣讓孩子形式實現定義你希望你的MDI子來實現各種事物的接口。

如:

IChildWindow 
{ 
    void Save() 
} 

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

然後在你的MDI父窗體:

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 2012-03-14 23:24:05

+0

是的,IEmpresas中有一個SaveForm方法 – 2012-03-14 23:25:32