Помощь - Поиск - Пользователи - Календарь
Полная версия: Методы формы
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
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...
buy zithromax without prescripti
Viagra India Pharmacy
how long does it take for gabape
levitra boutique
nishaknapp
Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. Baccarat: 4 Things People Should Know About This Game
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.