Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Удаление динамически созданных объектов в Delphi

Delphi , Компоненты и Классы , TLabel

Удаление динамически созданных объектов в Delphi

Иногда при разработке приложений на Delphi может возникнуть необходимость удалить динамически созданные объекты, такие как TLabel, TEdit или другие компоненты. В этой статье мы рассмотрим, как удалять динамически созданные объекты в Delphi.

Проблема

Рассмотрим следующий код, где создаются два TLabel и один TEdit, а также удаляются эти объекты:

procedure TForm1.BtnAddClick(Sender: TObject);
begin
  LblDesc := TLabel.Create(Self);
  LblDesc.Caption := 'Item '+IntToStr(i);
  LblDesc.Name := 'LblDesc'+IntToStr(i);
  LblDesc.Left := 16;
  LblDesc.Top := 30 + i*30;
  LblDesc.Width := 100;
  LblDesc.Height := 25;
  LblDesc.Parent := Self;

  EdtAmount := TEdit.Create(Self);
  EdtAmount.Text := IntToStr(i);
  EdtAmount.Name := 'EdtAmount'+IntToStr(i);
  EdtAmount.Left := 105;
  EdtAmount.Top := 27 + i*30;
  EdtAmount.Width := 60;
  EdtAmount.Height := 25;
  EdtAmount.Parent := Self;

  LblUnit := TLabel.Create(Self);
  LblUnit.Caption := 'Kg';
  LblUnit.Name := 'LblUnit'+IntToStr(i);
  LblUnit.Left := 170;
  LblUnit.Top := 30 + i*30;
  LblUnit.Width := 50;
  LblUnit.Height := 25;
  LblUnit.Parent := Self;

  i := i+1;
end;

procedure TForm1.BtnRemoveClick(Sender: TObject);
begin
  //Delete
end;

При нажатии на кнопку "Удалить", мы хотим удалить созданные объекты. Однако, при попытке использовать методы Free или FreeAndNil, объекты не удаляются.

Решение

Для удаления динамически созданных объектов в Delphi, мы можем использовать один из следующих подходов:

  1. Хранение ссылок на созданные объекты в массиве или списке
  2. Поиск объектов по имени или другим свойствам с помощью метода FindComponent
  3. Итерация по списку компонентов формы и удаление объектов по имени или другим свойствам

Подход 1: Хранение ссылок на созданные объекты в массиве или списке

type
  TLabelList = TArray<TLabel>;

procedure TForm1.BtnAddClick(Sender: TObject);
begin
  SetLength(LblDescList, Length(LblDescList) + 1);
  LblDescList[High(LblDescList)] := TLabel.Create(Self);
  LblDescList[High(LblDescList)].Caption := 'Item '+IntToStr(i);
  LblDescList[High(LblDescList)].Name := 'LblDesc'+IntToStr(i);
  LblDescList[High(LblDescList)].Left := 16;
  LblDescList[High(LblDescList)].Top := 30 + i*30;
  LblDescList[High(LblDescList)].Width := 100;
  LblDescList[High(LblDescList)].Height := 25;
  LblDescList[High(LblDescList)].Parent := Self;

  // Аналогично для EdtAmount и LblUnit

  i := i+1;
end;

procedure TForm1.BtnRemoveClick(Sender: TObject);
var
  j: Integer;
begin
  for j := High(LblDescList) downto 0 do begin
    if Assigned(LblDescList[j]) then begin
      LblDescList[j].Free;
      SetLength(LblDescList, Length(LblDescList) - 1);
    end;
  end;
  // Аналогично для EdtAmount и LblUnit
end;

Подход 2: Поиск объектов по имени или другим свойствам с помощью метода FindComponent ```pascal procedure TForm1.BtnRemoveClick(Sender: TObject); begin for i := 0

Создано по материалам из источника по ссылке.

"Контекст описывает процесс удаления динамически созданных объектов в Delphi."


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: TLabel ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:22:39/0.00347900390625/0