Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Вниз

Правельное выполнение метода 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
2-1172660999
МегаПупс
2007-02-28 14:09
2007.03.18
Курсор


15-1172356977
@!!ex
2007-02-25 01:42
2007.03.18
Столкновение двух машин.


2-1172548934
Ivolg
2007-02-27 07:02
2007.03.18
ASCII в Unicode


2-1172665986
jappak
2007-02-28 15:33
2007.03.18
Относительно координат


2-1172039794
User_OKA
2007-02-21 09:36
2007.03.18
Update





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский