Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Правельное выполнение метода Free   Найти похожие ветки 

 
dreamse   (2007-02-27 05:28) [0]

Приветствую.

Есть панель на ней динамически создаються кнопки. Нужно кодом очистить все кнопки на панели. т.е метод free

Пробую такой код но он конечно же не работает


  for i := 0 to ComponentCount - 1 do
      PanelButton(Components[i]).Free;


так как удаляеться компонент I и цикл выпадает с ошибкой.
Как грамотно очистить панель методом Free без использования цикла ?

прим. Почему беру ComponentCount потому что код выполняеться внутри компонента. так что всё верно. Удалиться может только кнопки мозданные внутри.


 
Palladin ©   (2007-02-27 05:56) [1]


> dreamse   (27.02.07 05:28)

for i := ComponentCount - 1 downto 0 do
     PanelButton(Components[i]).Free;


 
dreamse   (2007-02-27 09:39) [2]

спасибо

решил так

  while ComponentCount > 0 do
    if (Components[ComponentCount-1] is TRunPanelButton) then
      TRunPanelButton(Components[ComponentCount-1]).Free;


 
MBo ©   (2007-02-27 09:42) [3]

>решил так
это некорректно.


 
Ega23 ©   (2007-02-27 09:51) [4]

With Panel1 do
begin
 for i:=ControlCount-1 downto 0 do
  if (Controls[i] is TRunPanelButton) then
   TRunPanelButton(Controls[i]).Free;
end;


Примечание: данный код не совсем корректен, т.к. не учитывает, что на данной панели могут быть контейнеры (TPanel, TGroupBox, etc), в которых "сидят" твои кнопки.

Полностью правильно - рекурсивно делать.


 
Аноним   (2007-02-27 10:15) [5]


> решил так


Если у тебя вдруг хоть один компонент окажется не TRunPanelButton, то что получим?
Получим невыход из цикла.


> Ega23 ©


А зачем по контролам то? По компонентам - вполне нормально, и никакой рекурсии не нужно


 
dreamse   (2007-02-27 15:56) [6]

> Аноним   (27.02.07 10:15) [5]
> Если у тебя вдруг хоть один компонент окажется не TRunPanelButton, то что получим? Получим невыход из цикла.

В самом первом сообщении сказал ещё что такой ошибке не будет так как данный код выполняеться изнутри компонента панели где больше нет компонентов кроме кнопок

> MBo ©   (27.02.07 09:42) [3]

Всё работает. удаляеться с конца по одной кнопке. В чём некоректность ?


 
MBo ©   (2007-02-27 16:06) [7]

>Всё работает. удаляеться с конца по одной кнопке. В чём некоректность ?
Ты проверяешь, не кнопка ли это, значит, в списке могут быть и другие компоненты. Как только встретится другое, цикл заклинивает


 
Ega23 ©   (2007-02-27 16:17) [8]


> Всё работает. удаляеться с конца по одной кнопке. В чём
> некоректность ?


Тупо когда создаёшь свою кнопку, подставляй ей в качестве Owner свою панель.
И всё. Панель сама при уничтожении грохнет все свои контролы



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
15-1172354726
Kav
2007-02-25 01:05
2007.03.18
Сосмеху чуть не умер


4-1162561230
Igor_thief
2006-11-03 16:40
2007.03.18
Проблема с IternetCrackURL (wininet)


15-1171916334
SkySpeed
2007-02-19 23:18
2007.03.18
Во многих русско-,украинско-язычных программах - кракозябды!


15-1171057092
cadet
2007-02-10 00:38
2007.03.18
Linux


15-1171802179
C@N
2007-02-18 15:36
2007.03.18
господа! есть ли аналог дельфи, только фриваре????