2015-05-19 5 views
-3

В приложении winform у меня есть основная форма и другая форма. Я хочу вызвать событие FormClosing другой формы, когда я нажимаю «x» в основной форме.Catch close event of child form C#

@Update:

Код:

В программе:

frmMain frm = new frmMain(); 
frm.ShowDialog(); 

В frmMain:

private void btnFrm2_Click(object sender, EventArgs e) 
{ 
    Frm2 f2 = new Frm2(); 
    f2 .Show(); 
} 

В Frm2:

private void frm2_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    //something 
} 

Как я могу вызвать событие frm2_FormClosing, когда я закрою frmMain? Я знаю, что могу вызвать его, когда закрываю frm2, но я хочу вызвать его при закрытии frmMain.

+2

Пожалуйста, прочтите http://stackoverflow.com/help/how-to-ask, а затем отредактируйте свой вопрос. – Thealon

+0

Вы знаете, как подписаться на мероприятия? Где именно вы застряли? – germi

+0

Несколько дней назад я ответил на аналогичный вопрос [здесь] (http://stackoverflow.com/questions/30115533/stop-a-parent-form-from-closing/30115756#30115756). –

ответ

0

Используя observer pattern, вы можете сделать уведомление подписчикам (дочерние формы), когда FormClosing или любое другое действие происходит в основной форме. В обработчике подписчика вы можете поднять событие FormClosing (подписчик, дочернюю форму) или сделать все, что захотите.

  1. Основной формой является предметом
  2. дочерние формы подписки на эту тему (основная форма)
  3. Основная форма возникает уведомит событие в действие по вашему выбору (возможно FormClosing в вашем случае)
  4. Все subscribents (уведомление об их уведомлении)
  5. В этом уведомляемом событии вы делаете все, что хотите, например (форма ребенка)

Я считаю, что этот шаблон прост и очень гибкий. Я использую его для обновления данных во многих взаимосвязанных формах.

+0

Когда я закрываю основную форму, все остальные формы тоже закрываются. но это не вызывает событие FrmClosing дочерних форм. –

+0

Я не думаю, что это решение работает для случаев @chani Poz. –

+0

@ChaniPoz Я бы предложил вам изучить [Шаблон наблюдателя] (http://www.dofactory.com/net/observer-design-pattern), я считаю, что это будет наиболее подходящее решение для вашей проблемы. Вы можете сделать свою основную форму. Проверьте мои ответы на обновления. – user1970395