2012-03-14 2 views
1

У меня есть кнопка сохранения в родительской форме MDI, и я хочу вызвать какой-либо метод в активной дочерней форме MDI каждый раз, когда пользователь нажимает эту кнопку.Вызовите mdi дочерние методы от родителя

Предположим, у меня есть имя activemdichild.name, хранящееся в переменной.

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

И все мои дочерние формы MDI имеют метод сохранения.

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

Как программно вызывать метод SaveForm?

Если это не лучшая практика, что вы предлагаете?

+0

Что такое тип форм МДИ? – JaredPar

+0

Что вы имеете в виду под «типом»? public partial class EmpresasView: Form, IEmpresas ?? –

+0

Вот что я искал. Я обновлю свой ответ – JaredPar

ответ

2

Предполагая, что тип детей MDI Form является MyMdiForm вы можете сделать следующее

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

Спасибо за ваш ответ Джаред, всего один вопрос, зачем нужно перебирать детей, если я уже знаю ActiveMdiChild? –

+0

@JorgeZapata, я уходил с заголовка вашего вопроса. Если вы просто хотите сохранить активную, тогда вы можете просто сделать внутреннее тело цикла по значению «ActiveMdiChild» – JaredPar

2

Что о том, ваш ребенок формы реализации интерфейса, который определяет виды вещей, которые вы ожидаете ваши дети МДИ реализовать.

Такие, как:

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 –

Смежные вопросы