Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Незакрываються динамически созданные Panel [Win2k, WinXP]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо