| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка 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# происходит наследования. То есть если есть объект А, от него вывести объект В, а от В, в свою очередь С, то будем иметь такие соотношения иерархии:
З.Ы. это только мои предположения, потому если я не прав, то прошу меня поправить |
| Автор: 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 | ||
Нет, они отдельные (SDI). Только создание каждой последующей ("дочерней") формы происходит из текущей. Т.е. для 3 форм: в методах формы А создаётся и запускается самостоятельная форма B, в методах формы B создаётся и запускается самостоятельная форма C, и т.д. И естественно, при закрытии формы A предварительно каскадно закрываются сначала C, затем B и, наконец, А. FormClosing в данном случае генерируется только для форм B и A (т.е. для формы, закрываемой пользователем, (А) и её непосредственной "дочерней" формы (B)). |