Помощь - Поиск - Пользователи - Календарь
Полная версия: Методы формы
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
sheka
Какая разница между методами формы hide, close? Где и когда они используются?
мисс_граффити
это не свойства.
а разница - скрыть (спрятать) форму или закрыть.
sheka
Очепятался. smile.gif Исправил.
Логично. good.gif А более подробно? Мои поиски в инете не увенчались успехом.
volvo
Цитата
Исправил.
Исправляй еще раз. Это не события, это методы...

Цитата
А более подробно?
Первоисточник:
TControl.Hide
TCustomForm.Close
sheka
Это уже 3й раз smile.gif)) Сразу же я исправил на методы, но потом зашел в ИДЕ и посмотрел, что там написано Events.
Т. е. это означает, что метод выполняется по событию(или как-то так)?
volvo
Это означает, что при вызове метода Hide выполняется обработчик события OnHide, а при вызове метода Close - обработчик события OnClose.

P.S. Уточнение. Скорее, не при вызове, а после того, как метод произведет некоторые действия. Скажем, если вызван метод Hide - то произойдет то, что должно произойти: свойство Visible перебросится в False. А вот когда это произойдет - вызовется обработчик OnHide.

То же самое и с закрытием формы. Либо ты напрямую в коде повесишь на кнопку Form1.Close, либо попытаешься закрыть форму нажатием на крестик или Close в меню формы (которое Alt+F4). В любом из этих случаев будет вызван метод Close, что инициирует срабатывание события OnClose.
sheka
Все равно не понятно: если form.close, а потом form.show, то форма показывается, при чем данные которые были в ней записаны, те и остаются. Значит это есть одно и то же, а различие состоит только для главной формы?
volvo
Цитата
если form.close, а потом form.show, то форма показывается, при чем данные которые были в ней записаны, те и остаются.
Неправда. Смотря как ты показываешь форму. Если так:

// (в файле DPR надо закомментировать создание второй формы при создании приложения.
// создавать будет форму только тогда, когда она понадобится)
procedure TForm1.ShowSecondFormClick(Sender: TObject);
begin
with TForm2.Create(Self) do
begin
Show;
end;
end;
, то будут показаны не те данные, которые были записаны при предыдущем показе, а те, которыми форма инициализируется. Если у тебя при старте формы в Edit записывается "1", а ты руками на уже стартовавшей форме изменишь это значение на "2", и потом закроешь/откроешь форму - то там опять (неожиданно, правда?) будет "1".

А ты наверняка применяешь Close к той форме, которая инициализирована вместе с основной, при старте программы. Как же ты хочешь, чтоб она полноценно удалилась?
volvo
P.S. А теперь - твой случай, то есть, когда ты пытаешься закрыть/открыть форму, созданную через Application/CreateForm. Посмотри внимательно на описание параметров в обработчике OnClose
Видишь там параметр Action? А чуть ниже:
Цитата
If a form is an SDI child form, Action defaults to caHide.
заметил? То есть, фактически, дочерняя форма просто скрывается, не закрываясь. Закрытие формы возложено на Application, в его деструкторе форма закроется. Именно поэтому у тебя сохраняются все введенные данные. Если создать форму динамически - к ней тоже будет применен caHide, но при повторном создании экземпляр класса формы будет другой, поэтому форма поведет себя более адекватно. Но это утечка, ибо деструктор Application знать ничего не знает о вновь созданной форме, и позаботиться о корректном закрытии ее (при завершении приложения) не может, надо в OnClose при динамическом создании выставлять Action := caFree...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.