Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Закрытие Mdi приложения


Автор: vlsaf 27.10.2007, 21:01
Если я закрываю главное окно Mdi приложения, то дочерние окна сами закрываются и разрушаются.

Но мне надо самому позакрывать все дочерние окна, чтобы грамотно их закрыть.
Примерно вот так:

int i = 0
foreach (Form childForm in MdiChildren) { i++; childForm.Close(i); }
(тут значение i для более легкого понимания, на самом все чуть сложнее)

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

События главной формы FormClosing наступает уже после закрытия всех дочерних окон.

Надоумте, что сделать?

Автор: CYBERDREAM 28.10.2007, 11:02
Приветствую. Может такой вариант будет приемлем. Всех потомков подписать на событие:
Код

.....
        {
                ....
                foreach(Form md in MdiChildren)
                        md.FormClosing += new FormClosingEventHandler(md_FormClosing);
        }

        void md_FormClosing(object sender, FormClosingEventArgs e)
        {
              //собственно здесь твой код
        }

Надо будет повозится с тем когда их подписывать на это событие. Как вариант при добавлении Children'a 

Автор: vlsaf 28.10.2007, 11:14
Да. Это вариант. 
И мне кажется, единственно приемлемый в моем случае.

Спасибо!

Автор: CYBERDREAM 28.10.2007, 11:18
Пожалуйста. Заходи еще  smile  smile 

Автор: vlsaf 28.10.2007, 17:46
А... Э... Гм... Кхе-кхе 

Что-то я порадовался раньше времени.

Ты предлагаешь всех потомков подписать на какое событие?
На собственное событие FormClosing?

Но они все и так подписаны на собственное событие закрытие окна.

А что дальше. Если я в потомке, в событии FormClosing запущу мой цикл
Код

foreach (Form childForm in MdiChildren) 
{
  i++; 
 childForm.Close(i); 
}


То получится так, что если я закрою сам одино из открытых окон,
то позакрываются и все остальные окна Mdi приложения.
А это неприемлемо.

Или я что-то недопонял?

Автор: vlsaf 28.10.2007, 19:06
Усё. Проблема решена.

1. В главном окне я нажимаю кнопку закрытия окна.
 1.1 Вызываются для каждого дочернего окна FormClosing
 (!!! при этом дочерние окна не разрушаются !!!)

2. Вызывается FormClosing для главного окна
   (вот тут то я и ловлю это дело и творю с дочерними окнами все, что душе угодно)
   что-то я глубоко тормознул и сразу до этого не допер.

3. Идет разрушение главного и дочерних окон.
   Для меня уже не важно, в какой последовательности




Но, все равно, всем спасибо за участие. Без вас, никуда smile

Автор: CYBERDREAM 29.10.2007, 09:59
А от нас никуда и не денешься  smile 

Автор: Yellow_Submarine 26.11.2008, 22:38
Цитата(CYBERDREAM @ 28.10.2007,  11:02)
Приветствую. Может такой вариант будет приемлем. Всех потомков подписать на событие:
Код

.....
        {
                ....
                foreach(Form md in MdiChildren)
                        md.FormClosing += new FormClosingEventHandler(md_FormClosing);
        }

        void md_FormClosing(object sender, FormClosingEventArgs e)
        {
              //собственно здесь твой код
        }

Надо будет повозится с тем когда их подписывать на это событие. Как вариант при добавлении Children'a

hi *.
Случайно вышел на этот топик по поиску. А проблема похожая. Но вот вопрос, как отловить добавление нового Child в MDIChildren, если непосредственно не править метод, в котором он добавляется? То есть в стороннем классе имеется только ссылка на главную форму. И вот из нее бы как-нибудь вытащить событие, которое возбуждается при добавлении Child. Но как? Такого события вроде как нет. Может есть какие-нибудь идеи?
Интересно вообще, через год после последнего поста сюда заглянет кто-нибудь..)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)