|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.07.2015, 09:54 | #1 |
Форумчанин
Регистрация: 17.11.2009
Сообщений: 108
|
Механизм закрытия дочерних форм приложения
Добрый день. Пытаюсь сообразить, как грамотно реализовать механизм закрытия дочерних форм приложения.
Есть 2 ситуации: 1) Дочерняя форма закрывается вручную (пользователь нажал крестик) На каждой форме обрабатывается событие OnCloseQuery, т.е. всегда спрашивается, сохранить ли данные перед уничтожением окна(Да/Нет/Отмена). 2) Дочерние формы закрываются программно, при закрытии главной формы В данном случае опрашивается каждая дочерняя форма. Если они все дали согласие, то выполняем закрытие (aForm.Close). Если хоть на одной форме выбрали "Отмена", то не закрываем вообще ничего. Проблема в том, что в этот самый момент, когда вызываем aForm.Close для каждой формы, повторно вызывается подтверждение закрытия, что нелогично. Таким образом мне необходимо понять, как предотвратить повторный запрос подтверждения закрытия дочерних форм, если я это уже узнал перед тем, как приступить к их непосредственному закрытию. |
29.07.2015, 10:35 | #2 |
Форумчанин Подтвердите свой е-майл
Регистрация: 01.12.2006
Сообщений: 514
|
либо создать флаг на каждой форме, который отмечать когда ответ получен и вопрос не надо задаdать перед закрытием, и соответственно проверять этот флаг на закрытие
либо вызывать не aForm.Close, а aForm.Free (тут не уверен, только предположение) первый вариант считаю более правильным
Пишу на Delphi за еду
|
29.07.2015, 10:45 | #3 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
у класса дочерней формы сделай свойство, показывающее, что приличия соблЮдены и окно можно закрывать без запросу.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
29.07.2015, 10:54 | #4 |
Форумчанин
Регистрация: 17.11.2009
Сообщений: 108
|
Спасибо за ответы!
|
29.07.2015, 11:45 | #5 | |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
CloseQuery(); чем именно не угодил ?
Цитата:
Последний раз редактировалось ResourceSpace; 29.07.2015 в 11:47. |
|
29.07.2015, 12:32 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Бродкастом WM_CLOSE отправьте.
|
29.07.2015, 13:18 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Затруднение при загрузке дочерних форм из dll | BasVic | C++ Builder | 0 | 12.06.2012 13:13 |
Создание вкладок дочерних форм | arthur1 | C# (си шарп) | 1 | 28.04.2012 08:53 |
Закрытие дочерних MDI форм | Armorer | Общие вопросы Delphi | 10 | 09.08.2011 18:44 |
Закрытие всех дочерних форм | belarusfight | C# (си шарп) | 3 | 26.02.2011 15:06 |
Много дочерних форм... | L.A.M.E.R. | Общие вопросы Delphi | 4 | 03.08.2010 08:13 |