Форум: "Начинающим";
Текущий архив: 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