Методы формы, hide, close |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Методы формы, hide, close |
sheka |
27.01.2011 17:33
Сообщение
#1
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Какая разница между методами формы hide, close? Где и когда они используются?
Сообщение отредактировано: sheka - 27.01.2011 18:54 |
мисс_граффити |
27.01.2011 17:37
Сообщение
#2
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
это не свойства.
а разница - скрыть (спрятать) форму или закрыть. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
sheka |
27.01.2011 18:45
Сообщение
#3
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Очепятался. Исправил.
Логично. А более подробно? Мои поиски в инете не увенчались успехом. |
volvo |
27.01.2011 18:49
Сообщение
#4
|
Гость |
Цитата Исправил. Исправляй еще раз. Это не события, это методы...Цитата А более подробно? Первоисточник:TControl.Hide TCustomForm.Close |
sheka |
27.01.2011 18:53
Сообщение
#5
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Это уже 3й раз )) Сразу же я исправил на методы, но потом зашел в ИДЕ и посмотрел, что там написано Events.
Т. е. это означает, что метод выполняется по событию(или как-то так)? Сообщение отредактировано: sheka - 27.01.2011 18:53 |
volvo |
27.01.2011 18:58
Сообщение
#6
|
Гость |
Это означает, что при вызове метода Hide выполняется обработчик события OnHide, а при вызове метода Close - обработчик события OnClose.
P.S. Уточнение. Скорее, не при вызове, а после того, как метод произведет некоторые действия. Скажем, если вызван метод Hide - то произойдет то, что должно произойти: свойство Visible перебросится в False. А вот когда это произойдет - вызовется обработчик OnHide. То же самое и с закрытием формы. Либо ты напрямую в коде повесишь на кнопку Form1.Close, либо попытаешься закрыть форму нажатием на крестик или Close в меню формы (которое Alt+F4). В любом из этих случаев будет вызван метод Close, что инициирует срабатывание события OnClose. |
sheka |
27.01.2011 19:00
Сообщение
#7
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Все равно не понятно: если form.close, а потом form.show, то форма показывается, при чем данные которые были в ней записаны, те и остаются. Значит это есть одно и то же, а различие состоит только для главной формы?
|
volvo |
27.01.2011 19:24
Сообщение
#8
|
Гость |
Цитата если form.close, а потом form.show, то форма показывается, при чем данные которые были в ней записаны, те и остаются. Неправда. Смотря как ты показываешь форму. Если так:// (в файле DPR надо закомментировать создание второй формы при создании приложения., то будут показаны не те данные, которые были записаны при предыдущем показе, а те, которыми форма инициализируется. Если у тебя при старте формы в Edit записывается "1", а ты руками на уже стартовавшей форме изменишь это значение на "2", и потом закроешь/откроешь форму - то там опять (неожиданно, правда?) будет "1". А ты наверняка применяешь Close к той форме, которая инициализирована вместе с основной, при старте программы. Как же ты хочешь, чтоб она полноценно удалилась? |
volvo |
27.01.2011 20:01
Сообщение
#9
|
Гость |
P.S. А теперь - твой случай, то есть, когда ты пытаешься закрыть/открыть форму, созданную через Application/CreateForm. Посмотри внимательно на описание параметров в обработчике OnClose
Видишь там параметр Action? А чуть ниже: Цитата If a form is an SDI child form, Action defaults to caHide. заметил? То есть, фактически, дочерняя форма просто скрывается, не закрываясь. Закрытие формы возложено на Application, в его деструкторе форма закроется. Именно поэтому у тебя сохраняются все введенные данные. Если создать форму динамически - к ней тоже будет применен caHide, но при повторном создании экземпляр класса формы будет другой, поэтому форма поведет себя более адекватно. Но это утечка, ибо деструктор Application знать ничего не знает о вновь созданной форме, и позаботиться о корректном закрытии ее (при завершении приложения) не может, надо в OnClose при динамическом создании выставлять Action := caFree... |
Текстовая версия | 19.05.2024 11:53 |