![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Ситуация следующая. Имеется главная форма приложения, на которой (а вернее, на панели) отображается главная схема, и произвольное число подчинённых (под "подчинённых" я понимаю, что при закрытии формы каскадно закрываются все дочерние формы) форм, на каждой из которых (также на панельках) отображается соответствующая подсхема главной схемы. Каждая из подчинённых форм также может иметь произвольное число своих подчинённых форм с подсхемами.
Заголовок каждой формы состоит из заголовков всех родительских форм + число (номер). Это число характеризует количество данных схем, открытых в в данном приложении (одну и ту же подсхему можно открывать в отдельном окне сколько угодно раз). При закрытии одной из форм необходимо изменить заголовки всех форм, которые связаны с данной формой, т.е. отображают ту же схему, что и данная форма, либо являются потомками формы, отображающей данную схему. При этом нужно исключить из процесса обновления заголовков те формы, которые являются потомками закрываемой формы, поскольку они также будут закрыты. Это нужно, чтобы не тратить процессорное время на лишнее обновление заголовков. Вопрос следующий: Каким образом проще всего исключить из процесса обновления заголовков дочерние формы ? Пока я обновляю заголовки в обработчике события формы Disposed (посредством Application.OpenForms), которое генерируется после закрытия формы. Вследствие чего, получаю null'евое поле Owned закрываемой формы (память уже освобождена). Если обновлять заголовки в обаботчике какого-то события, генерируемого до закрытия формы, то можно было бы вычислить всех потомков закрываемой формы через свойства Owned... |
|||
|
||||
| tdebugger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 20.1.2007 Репутация: 2 Всего: 4 |
Нельзя ли визуально показать, как это все выглядит.
--------------------
ТЕХНОЛОГИЯ "JAVA" НЕ ПРЕДНАЗНАЧЕНА ДЛЯ УПРАВЛЕНИЯ ЯДЕРНЫМИ УСТАНОВКАМИWindows98 License.txt |
|||
|
||||
| CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Визуально ?! Довольно трудоёмко...
Перефразирую текст вопроса: Имеется форма F, у неё есть дочерняя форма F1, у которой в свою очередь тоже есть дочерняя форма F11. При закрытии формы F предварительно каскадно закрываются формы F1 и F11. Т.е. вначале генерируется событие OnDisposed формы F11, затем OnDisposed формы F1 и, наконец, OnDisposed формы F. В обработчике OnDisposed я изменяю заголовки всех форм. Для исключения из кандидатов на изменение заголовка форм F11, F1 и F необходимо при первом вызове обработчика OnDisposed (когда освобождается форма F11) определить идентификаторы (например, handle'ы) форм F1 и F, которые сейчас закроются. Но событие OnDisposed формы F11 генерируется, когда эта форма уже освобождена, т.е. её поле Owner = null. И мы не сможем получить никакой информации о её владельцах F1 и F... Наилучшим решением будет использование события, которое генерируется перед физическим закрытием формы (сразу же после нажатия на крестик, F4 или через системное меню) и только для закрываемой формы (для дочерних форм не генерируется, как в случае с OnDisposed). з.ы. Собственно, вариант с OnDisposed не совсем приемлем, поскольку для данного примера (при закрытии формы F) процедура обновления заголовков будет выполняться 3 раза (OnDisposed формы F11, OnDisposed формы F1 и OnDisposed формы F) вместо одного... |
|||
|
||||
| tdebugger |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 20.1.2007 Репутация: 2 Всего: 4 |
а если так:
с помощью этого CloseReason можно определить, кто инициализировал закрытие окна: система, юзверь, либо было ЗАКРЫТО РОДИТЕЛЬСКОЕ ОКНО- кажется об этом и идет речь.
В программе на .NET о какой-либо экономии как правило можно забыть... --------------------
ТЕХНОЛОГИЯ "JAVA" НЕ ПРЕДНАЗНАЧЕНА ДЛЯ УПРАВЛЕНИЯ ЯДЕРНЫМИ УСТАНОВКАМИWindows98 License.txt |
||||||
|
|||||||
| CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Проблема следующая. CloseReson равен UserClosing и для всех дочерних (по отношению к закрываемому окну) окон...
Добавлено через 27 секунд А мне как раз нужно отбросить из обработки дочерние окна... |
|||
|
||||
| tdebugger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 20.1.2007 Репутация: 2 Всего: 4 |
Как это? Как у тебя создаются дочерние окна?
--------------------
ТЕХНОЛОГИЯ "JAVA" НЕ ПРЕДНАЗНАЧЕНА ДЛЯ УПРАВЛЕНИЯ ЯДЕРНЫМИ УСТАНОВКАМИWindows98 License.txt |
|||
|
||||
| CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Имеется окно (форма 1). Тыкаю мышой на подсхему. В обработчике тыкания мышой этой формы создаю новыю форму. Причём при закрытии формы 1 предварительно каскадно закрывается дочернее окно... |
|||
|
||||
| tdebugger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 20.1.2007 Репутация: 2 Всего: 4 |
Я не о том, я код имел в виду, ибо не понятно, почему у дочернего окна CloseReason не равен FormOwnerClosing.
--------------------
ТЕХНОЛОГИЯ "JAVA" НЕ ПРЕДНАЗНАЧЕНА ДЛЯ УПРАВЛЕНИЯ ЯДЕРНЫМИ УСТАНОВКАМИWindows98 License.txt |
|||
|
||||
| CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Нет, всё-таки у дочерних окон CloseReason равен OwnerClosing. Как-то не так смотрел...
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |