gpt4 book ai didi

delphi - 为什么释放 TObjectList 也会删除控件?

转载 作者:行者123 更新时间:2023-12-03 15:37:26 27 4
gpt4 key购买 nike

我使用 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/

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