gpt4 book ai didi

delphi - 在Delphi中删除TLabel

转载 作者:行者123 更新时间:2023-12-03 19:26:56 24 4
gpt4 key购买 nike

目前,我动态创建了两个TLabel和一个TEdit,将它们分别命名为LblDesc + i,EdtAmount + i和LblUnit + i-其中i是一个整数,每次添加这3个元素时,我都会将其迭代一次。元素中的数据仅用于仿真目的。
我现在的问题是删除三个对象。 Ive尝试了free和FreeAndNil,一点都没有运气。
任何帮助是极大的赞赏。

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;

最佳答案

过去,我遇到过与删除某些组件有关的问题,我已经解决了将父组件的组件设置为nil的问题,但由于TControl的析构函数(如果调用)已经完成了工作,因此情况不再如此。

只需释放组件即可将其删除。

LblUnit.Free;




如果需要按组件名称查找组件,请使用 System.Classes.TComponent.FindComponent或在 Components列表上进行迭代。

for i := ComponentCount-1 downto 0 do begin
if Components[i].Name = 'LblUnit'+IntToStr(i) then begin
//TControl(Components[i]).Parent := nil; {uncomment if you have the same issue I've had}
Components[i].Free;
end;
. . .
end;




编辑

如果用于组件名称构造 i的索引 'LblUnit'+IntToStr(i)不位于范围 [0..ComponentCount-1]中,则必须相应地修改索引。

关于delphi - 在Delphi中删除TLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35454111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com