![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Незакрываються динамически созданные Panel [Win2k, WinXP]
OlegM © (2007-08-07 14:37:00)Привет всем
Есть форма, на ней динамически создаются TPanel, и на каждой из них TButton, в которую на событие OnClick вешаеться код
(Form1.Components[i] as TPanel).Free;
Но иногда все работает, иногда выдает Abstract Error иногда выдает
Ассес вилатион. Подскажите как правильно закрывать динамически созданные компоненты.
{RASkov} (2007-08-07 14:56:00) [21]> [3] Сергей М. © (07.08.07 14:52)
Угу...
Только я не совсем понял, что должно быть по нажатию кнопки, которая на панеле.....(
{RASkov} (2007-08-07 14:54:00) [22]> then TPanel(Components[i]).Free;
Впрочем и приведение в данном случае не обязательно...
Достаточно:
for i:=0 to ComponrntCount-1 do
if Components[i] is TPanel then Components[i].Free;
Сергей М. (2007-08-07 14:52:00) [23]
> {RASkov} © (07.08.07 14:45) [1]
Накой ляд здесь проверка и приведение типа ?
Free - он и в Африке Free)
> OlegM (07.08.07 14:37)
> как правильно закрывать динамически созданные компоненты
Точно так же как и созданные "статически" - методами Free, Destroy.
Только не "закрывать", а разрушать.
{RASkov} (2007-08-07 14:50:00) [24]> [1] {RASkov} © (07.08.07 14:45)
Только вот так более логичнее:
if Components[i] is TPanel then TPanel(Components[i]).Free;
Это уничтожет все панели на форме - и динамически созданные и статически, что впрочем и в [0] и [1]...
Только в [0] мы пытаемся любой компонент привести к TPanel и вызвать Free
Так же i - не должен равняться или быть больше ComponentCount....
{RASkov} (2007-08-07 14:45:00) [25]> [0] OlegM (07.08.07 14:37)
if Form1.Components[i] is TPanel then TPanel(Form1.Components[i]).Free;