Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие Mdi приложения, Как самому позакрывать дочерние окна? 
V
    Опции темы
vlsaf
Дата 27.10.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



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

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

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

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

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

Надоумте, что сделать?
PM   Вверх
CYBERDREAM
  Дата 28.10.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 4
Всего: 28



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

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

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

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


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
vlsaf
Дата 28.10.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



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

Спасибо!
PM   Вверх
CYBERDREAM
Дата 28.10.2007, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 4
Всего: 28



Пожалуйста. Заходи еще  smile  smile 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
vlsaf
Дата 28.10.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



А... Э... Гм... Кхе-кхе 

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

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

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

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

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


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

Или я что-то недопонял?
PM   Вверх
vlsaf
Дата 28.10.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



Усё. Проблема решена.

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

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

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




Но, все равно, всем спасибо за участие. Без вас, никуда smile
PM   Вверх
CYBERDREAM
Дата 29.10.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 4
Всего: 28



А от нас никуда и не денешься  smile 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Yellow_Submarine
Дата 26.11.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.12.2006

Репутация: нет
Всего: нет



Цитата(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. Но как? Такого события вроде как нет. Может есть какие-нибудь идеи?
Интересно вообще, через год после последнего поста сюда заглянет кто-нибудь..)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.