Иногда при разработке приложений на Delphi может возникнуть необходимость удалить динамически созданные объекты, такие как TLabel, TEdit или другие компоненты. В этой статье мы рассмотрим, как удалять динамически созданные объекты в Delphi.
Проблема
Рассмотрим следующий код, где создаются два TLabel и один TEdit, а также удаляются эти объекты:
При нажатии на кнопку "Удалить", мы хотим удалить созданные объекты. Однако, при попытке использовать методы Free или FreeAndNil, объекты не удаляются.
Решение
Для удаления динамически созданных объектов в Delphi, мы можем использовать один из следующих подходов:
Хранение ссылок на созданные объекты в массиве или списке
Поиск объектов по имени или другим свойствам с помощью метода FindComponent
Итерация по списку компонентов формы и удаление объектов по имени или другим свойствам
Подход 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.