IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Методы формы, hide, close
sheka
сообщение 27.01.2011 17:33
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Какая разница между методами формы hide, close? Где и когда они используются?

Сообщение отредактировано: sheka - 27.01.2011 18:54
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 27.01.2011 17:37
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


это не свойства.
а разница - скрыть (спрятать) форму или закрыть.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 27.01.2011 18:45
Сообщение #3


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Очепятался. smile.gif Исправил.
Логично. good.gif А более подробно? Мои поиски в инете не увенчались успехом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.01.2011 18:49
Сообщение #4


Гость






Цитата
Исправил.
Исправляй еще раз. Это не события, это методы...

Цитата
А более подробно?
Первоисточник:
TControl.Hide
TCustomForm.Close
 К началу страницы 
+ Ответить 
sheka
сообщение 27.01.2011 18:53
Сообщение #5


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Это уже 3й раз smile.gif)) Сразу же я исправил на методы, но потом зашел в ИДЕ и посмотрел, что там написано Events.
Т. е. это означает, что метод выполняется по событию(или как-то так)?

Сообщение отредактировано: sheka - 27.01.2011 18:53
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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, то форма показывается, при чем данные которые были в ней записаны, те и остаются. Значит это есть одно и то же, а различие состоит только для главной формы?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.01.2011 19:24
Сообщение #8


Гость






Цитата
если 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
сообщение 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...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.05.2024 11:53
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"