C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление объекта и его родителя  (Прочитано 1752 раз)
php_vasia
Участник


Сказали спасибо: +1/-2
Offline

Сообщений: 120


Удаление объекта и его родителя
« : 04 Апрель 2014, 08:25:53 »

я Создаю динамически Panel на ней кнопка.
Как сделать что бы по клике по этой кнопке удалялась сама кнопка и Panel, на которой она расположена?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Удаление объекта и его родителя
« Ответ #1 : 04 Апрель 2014, 15:42:59 »

Код
Panel->Visible = false;
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Удаление объекта и его родителя
« Ответ #2 : 04 Апрель 2014, 16:20:56 »

Цитата: php_vasia от 04 Апрель 2014, 08:25:53
я Создаю динамически Panel на ней кнопка.
Как сделать что бы по клике по этой кнопке удалялась сама кнопка и Panel, на которой она расположена?
Tantos предложил, конечно, оригинальное решение, однако оно не удаляет панель и кнопку, а лишь скрывает с экрана. Я думаю, что удалить объект, из его же функции, нельзя. Или я не прав?
Записан
avb
Участник


Сказали спасибо: +4/-2
Offline

Сообщений: 56


Re: Удаление объекта и его родителя
« Ответ #3 : 04 Апрель 2014, 19:31:27 »

А если:
Код
PostMessage(Panel->Handle, WM_CLOSE, 0, 0);
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Удаление объекта и его родителя
« Ответ #4 : 05 Апрель 2014, 02:18:38 »

avb, это не избавляет от необходимости подчистить за собой выделенную память. Вполне все это можно вынести в OnClose формы.
Записан
DimDimon
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 3


Re: Удаление объекта и его родителя
« Ответ #5 : 05 Апрель 2014, 17:50:00 »

Скока есть new стока должно быть и delete. Так правильно.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


« Ответ #6 : 06 Апрель 2014, 21:07:33 »

Небольшое уточнение. Для VCL объектов (унаследованных от TObject) за освобождение памяти отвечает компонент-владелец (Owner). То есть можно создать кнопку на форме, сделав саму форму не только родителем, но и владельцем, что избавит от необходимости удаления этой кнопки вручную:
Код
TButton* btn = new TButton(this); // код выполняется в методе текущей формы: btn->Owner = this
btn->Parent = this; // а здесь присваиваем родителя - это тоже наша форма...
 

В этом случае кнопка удалится (высвободится из памяти) сама при удалении формы (в деструкторе TComponent).
Конечно, всегда можно удалять и вручную (оператором delete).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.113 секунд. Запросов: 19.