我使用 TObjectList 来处理特定的标签列表。但是当我在 Try Final 中执行推荐的 .Free 时,它也会从列表中删除控件。
带有 3 个标签的简单示例:
Procedure GetHeaderLabels(var aList:TObjectList<TLabel>);
begin
aList.Add(Form1.lblHeaderCars);
aList.Add(Form1.lblHeaderBrands);
aList.Add(Form1.lblHeaderModels);
end;
procedure TForm1.Button1Click(Sender: TObject);
var vHeaderLabelsList:TObjectList<TLabel>;
begin
vHeaderLabelsList:=TObjectList<TLabel>.Create;
try
GetHeaderLabels(vHeaderLabelsList);
{... process Header Labels }
finally
vHeaderLabelsList.Free;
end;
end;
在这种情况下,当我执行此代码时,我最终会丢失标签控件 - 它们从表单中删除,并且在调试中我看到控件为零。
我不应该 .Free TObjectList 吗?如何释放 TObjectlist 并保留控件?
最佳答案
TObjectList
有一个 OwnsObjects
属性,默认是 True
。如果您在释放它之前的某个时间不更改它,它将释放它包含的对象。如果您不想这样,请将 OwnsObjects
设置为 False
。
vHeaderLabelsList := TObjectList<TLabel>.Create(False);
如果您不需要 TObjectList 拥有(清理)的对象,最好使用 TList 代替:
vHeaderLabelsList := TList<TLabel>.Create;
关于delphi - 为什么释放 TObjectList 也会删除控件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39302634/