Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Удаление компонентов с формы


Автор: zzmeyz 17.11.2006, 10:45
Есть форма с компонентом PageControl с тремя закладками. Как можно программно удалить все компоненты расположенные на второй закладке? Проще говоря, нужно отчистить содержимое закладки.

Автор: popolzen 17.11.2006, 11:00
Код

with PageControl.Pages[1] do 
  for i := 1 to ControlCount do Controls[0].Free;

Автор: digs 17.11.2006, 11:02
PageControl.Pages[1].DestroyComponents

Автор: zzmeyz 17.11.2006, 12:19
Еще вопрос: можно ли выбирать компоненты, которые удалять не нужно? Если точнее, нужно чтоб остались две кнопки.

Автор: popolzen 17.11.2006, 13:00
digs, ты проверял этот код? Попробуй в Form Designer'е создать небольшой примерчик и проверить свой код для начала. Form Designer для всех созданных в нем компонентов выставляет свойство Owner в имя формы, а метод DestroyComponents использует как раз это свойство.
PageControl.Pages[1].DestroyComponents не найдет ни одного компонента, принадлежащего ему, и поэтому не освободит ничего (не путай Owner с Parent).


zzmeyz, да, это можно сделать, написав что-то типа
Код

with PageControl.Pages[1] do 
  for i := 1 to ControlCount do 
    if (Controls[0].Name <> 'Button1') and (Controls[0].Name <> 'Button2')
    then Controls[0].Free;

Автор: Sunvas 17.11.2006, 13:01
Цитата(zzmeyz @  17.11.2006,  12:19 Найти цитируемый пост)
 Если точнее, нужно чтоб остались две кнопки.

У каждого компонента есть свойство tag те кнопки, которые на надо удалять присвой tag = 1 и при удалении проверяй.
Вот те пример:
Код

if PageControl1.Pages[0].ControlCount>0 then
with PageControl1.Pages[0] do
  for i := 0 to ControlCount-1 do if Controls[i].tag<>1 then Controls[i].Free;

Автор: Rennigth 17.11.2006, 13:04
Объявляешь массив контролов которые не надо удалять, аля:
Код

FNonFreeControls: TDynPointerArray;

в него добавляешь свои кнопки которые не надо удалять:
Код

SetLength(FNonFreeControls, 2);
FNonFreeControls[0] := Button1;
FNonFreeControls[1] := Button2;


При удалении проверяешь что-бы их не удалять:
Код

var
  i: Integer;
  function ControlNeedFree(AControl: TControl): Boolean;
  var
    j: Integer;
  begin
    Result := True;
    for j := Low(FNonFreeControls) to High(FNonFreeControls) do
      if TControl(FNonFreeControls) =  AControl then
      begin
        Result := False;
        Break;  
      end;
  end;
begin
  with PageControl.Pages[1] do 
    for i := PageControl.Pages[1].ControlsCount - 1 downto 0 do 
      if ControlNeedFree(Controls[i]) then
        Controls[i].Free;
end;

Автор: Alexeis 17.11.2006, 14:34
Цитата(Rennigth @  17.11.2006,  13:04 Найти цитируемый пост)
При удалении проверяешь что-бы их не удалять:

Не нужно в методе Free уже имеется такая проверка.

Автор: Rennigth 17.11.2006, 14:38
alexeis1, 
Цитата(zzmeyz @  17.11.2006,  12:19 Найти цитируемый пост)
Еще вопрос: можно ли выбирать компоненты, которые удалять не нужно? Если точнее, нужно чтоб остались две кнопки. 

Я имел ввиду проверять контролы которые не надо удалять smile


Автор: digs 17.11.2006, 18:15
popolzen
Ну да, извиняюсь не подумал.
Я просто привык удалять лишь то, что сам руками создаю

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)