| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Событие при закрытие дочернего окна в MDI |
| Автор: WinNet 6.3.2007, 16:21 |
| Подскажите пожалуйста какое событие генерируется в главной форме (MDI контейнере) при закрытии дочернего окна? |
| Автор: -Mikle- 6.3.2007, 17:18 |
| Насколько я знаю, вроде никакого (наверное). Нужно при добавлении MDIChild'ов вешать на событие FormClosing и\или FormClosed один какой-то обработчик. |
| Автор: WinNet 6.3.2007, 21:41 |
| Значит есть только MDIShildActivate , а событие при закрытии порожденных окон отсутствует (или не имеет смысла быть). Например: после закрытия дочернего окна должен сработать метод , как грамотно обработать это событие? Можно примерчик... |
| Автор: WinNet 4.4.2007, 20:07 |
| Уф... никак не получается! Алгоритм такой: в главной программе при нажатит на кнопка_1 создается дочерняя форма , при нажатии на кнопка_2 в дочерней форме появляется 2-рая дочерняя форма а первая дочерняя закрывается , при нажатии кнопка_3 во 2-й дочерней форме происходит ее закрытие . И тогда главная форма должна обработать это закрытие то есть выполнить определенные действия. Пожалуйста объесните по подробней что где писать? (Работаю с книгой Троелсена но там об этом ни слова) |
| Автор: XavierElf 5.4.2007, 09:11 | ||
А если использовать WinAPI функцию FindWindow()?
Вообще, насколько я знаю, с закрытием формы-родителя закрывается и все дочерние объекты данной формы... Может я вопрос не правильно понял, но звучит это примерно так, что вы хотите создавать форму №1, в ней форму №2 и форму № после этого хотите закрыть... Тогда перед закрытием может стоит поменять парента у той формы, чьего родителя хотите закрыть? |
| Автор: ivashkanet 5.4.2007, 09:40 |
| WinNet, вгрызайся зубами в код -Mikle- и пытайся в нем разобраться. Его идея самая, ИМХО, лучшая. Единственное что бы я изменил, это вместо AttachAsMDIChild() использовать событие MDIСhildActivate. |
| Автор: WinNet 6.4.2007, 17:28 |
| Ок... в коде разобрался , работает. Но только если создается 1-на дочерняя форма. Как быть если из 1-й дочерней формы создается еще одна (первая закрывается:Close) и только после закрытия 2-й в родительской форме должно произойти событие? |
| Автор: XavierElf 6.4.2007, 18:06 | ||
Хммм... Ну попробуй во второю дочернюю форму передавать ссылку на главную форму, в главной форме добавь свойство, к примеру
которое определяет существует ли ещё твоя дочерняя форма или нет и запиши в какой-нибудь обработчик проверку свойства, потом в первом дочернем когда создаёшь второе выставляй свойство IsSecondChildExists в true, а во второй дочерней форме в обработчике закрытия меняй у основной формы свойство IsSecondChildExists в false. З.Ы. private bool? _isSecondChildExists = null; - это специальный тип bool, который может принимать значение null. Используем его для того, чтобы твоё событие не наступило раньше времени |
| Автор: WinNet 10.4.2007, 19:56 | ||||
| Что то все равно не очень получается... Вот создал 1-ю дочернюю форму как посоветовал -Mikle- . Затем в этой дочеоней форме я создаю 2-ю вот так
Может я здесь что то напутал? Так как при закрвтии 2-й дочерней формы(NextForm), событие
не наступает! |