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


Автор: CyraxZ 27.8.2007, 09:23
Имеется иерархия окон: родительское W, дочернее W1, у дочернего ещё дочернее W2 и т.д.
Закрываю родительское окно W и наблюдаю за генерацией событий FormClosing (точка останова в обработчике FormClosing).
Событие FormClosing генерируется только для закрываемого окна W (CloseReason = UserClosing) и его непосредственного дочернего W1 (CloseReason = OwnerClosing). Для W2, W3 и т.д. не генерируется, тем не менее они тоже закрываются (каскадно - не каскадно, не знаю).
Если закрыть произвольное окно иерархии Wi, то событие FormClosing будет сгенерировано для W(i) и W(i+1) и всё...

В чём дело ?

Каждое дочернее окно я связываю с родительским через свойство Owner (если это имеет значение)...

Автор: Secret 27.8.2007, 14:48
Мне кажется что єто связано с тем как в C# происходит наследования.

То есть если есть объект А, от него вывести  объект В, а от В, в свою очередь С, то будем иметь такие соотношения иерархии:
  •  для пары А и В, базовым будет объект А;
  •  для пары В и С, базовым будет объект В.

З.Ы. это только мои предположения, потому если я не прав, то прошу меня поправить smile, и вотще мне кажется что это очень даже интересная особенность, которая заслуживает   пределения ей внимания ;)
 

Автор: CyraxZ 27.8.2007, 18:07
Нет, кто-нибудь скажет, действительно описанная ситуация имеет место или это я что-то не так делаю ?

Автор: CyraxZ 28.8.2007, 20:53
Неужели все в отпуск ушли... В конце августа...

Автор: CyraxZ 5.9.2007, 22:17
У кого-то крыша едет...

Автор: CyraxZ 10.9.2007, 23:13
Ну так нужно разобраться... Что за глюк ?

Автор: mr.DUDA 11.9.2007, 13:20
А это как такое может быть, что 3 формы вложены в друг друга, они MDI-шные ? Может обычные события WinForms просто не заточены под сложные варианты и генерируются не во всех случаях.

Автор: CyraxZ 11.9.2007, 22:11
Цитата

3 формы вложены в друг друга, они MDI-шные ?

Нет, они отдельные (SDI). Только создание каждой последующей ("дочерней") формы происходит из текущей. Т.е. для 3 форм: в методах формы А создаётся и запускается самостоятельная форма B, в методах формы B создаётся и запускается самостоятельная форма C, и т.д. И естественно, при закрытии формы A предварительно каскадно закрываются сначала C, затем B и, наконец, А.
FormClosing в данном случае генерируется только для форм B и A (т.е. для формы, закрываемой пользователем, (А) и её непосредственной "дочерней" формы (B)).

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