| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как закрыть иерархию модальных форм? |
| Автор: altarasjuk 6.9.2003, 20:17 | ||
| Привет! Вот собственно говоря какая штука: Из одной формы открывается другая модальная и так несколько раз. т.е Form1 Form2 Form3 Form4 И такой вопрос, как при желании с Form4 закрыть всё это безобразие
|
| Автор: <Spawn> 6.9.2003, 20:39 | ||
Так сканает(Закроет все кроме главной формы)?
|
| Автор: dm9 6.9.2003, 20:47 |
| А чем не нравится оценка в i-1 форме результата вызова ShowModal(Form_i) и вызов Close? |
| Автор: altarasjuk 6.9.2003, 20:55 | ||
А мысль себя закрывать и бросать Exception по цепочке, и в "владельце" его обрабатывать... (у меня формы открываются статическими методами, и из них буду бросать). Вот что значит щють-щють подумать |
| Автор: <Spawn> 6.9.2003, 21:04 | ||
А чем TForm(Owner).Close не нравится? Ставишь в OnClose его для всех этих форм и все(кроме первоначальной, а то он главную форму закроет
И будет тебе счастье |
| Автор: dm9 6.9.2003, 21:22 |
| Об этом уже, кажется, говорилось. Разве можно закрывать владельца, если метод ещё не отработал? Или я что-то не понимаю? |
| Автор: <Spawn> 6.9.2003, 21:26 |
| dm9 Я проверил и все закрылось без каких либо ошибок. |
| Автор: <Spawn> 6.9.2003, 21:39 | ||||||
Не знаю чем тебе не нравится то, что четвертая форма будет знать о главной, в поток тогда что ли все помести))) :
И из нужной формы запусти его :
|
| Автор: dm9 6.9.2003, 21:54 | ||||
Что-то торможу... у меня так не выходит. Не кинешь исходник, если ещё не удалил? Интересно уже стало |
| Автор: altarasjuk 6.9.2003, 22:04 | ||
<Spawn>б задестрой объект когда метод в нём ещё не отработал, и в этом методе подёргай поля и методы этого объекта:
2. Я решил остановиться на Exception - самый нечерезжопный вариант. И работает З.Ы. Не все Access voilation отлавливаются траями |
| Автор: maxim1000 6.9.2003, 22:21 |
| можно создать какой-нибудь флажок когда модальной форме стало известно, что нужно закрыться и закрыть предыдущие формы она его установит в true, если нет - false каждая форма после использования другой модальной формы должна будет проверять этот флажок и закрываться, если он true (ну, может не каждая, главной форме так поступать не стоит) таким образом вызванная форма ничего не знает о своем владельце, а просто дает ему информацию для размышлений |
| Автор: dm9 6.9.2003, 22:36 |
| А флажок этот где будет? Правильно, или в общем доп. модуле, или где? В том самом модуле главной формы, от чего мы и уходили |
| Автор: maxim1000 7.9.2003, 08:48 |
| вместо флажка можно использовать значеие ModalResult оно возвращается функцией ShowModal тогда форма, которая вдруг решила, что нужно много чего закрыть, возвращает в ModalResult, какое-нибудь специальное значение другие формы проверяют результат функции ShowModal, если он равен этому значению, то закрывают себя и в ModalResult себе пишут то же самое |