2012-03-14 121 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