Delphi中释放TObjectList时,为何会连带删除其中的所有控件及其关联资源?

2026-04-10 18:572阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计343个文字,预计阅读时间需要2分钟。

Delphi中释放TObjectList时,为何会连带删除其中的所有控件及其关联资源?

我使用TObjectList来处理特定的标签列表。但在Try+Finally中执行推荐的.Free时,它也会删除列表中的控件。以下三个标签的简单示例:

1. 过程 GetHeaderLabels(var aList: TObjectList); begin aList.Add('标签1'); aList.Add('标签2'); aList.Add('标签3'); end;

2.过程 GetHeaderLabels(var aList: TObjectList); begin aList.Add('Tag1'); aList.Add('Tag2'); aList.Add('Tag3'); end;

3.过程 GetHeaderLabels(var aList: TObjectList); begin aList.Add('Label1'); aList.Add('Label2'); aList.Add('Label3'); end;

Delphi中释放TObjectList时,为何会连带删除其中的所有控件及其关联资源?

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

本文共计343个文字,预计阅读时间需要2分钟。

Delphi中释放TObjectList时,为何会连带删除其中的所有控件及其关联资源?

我使用TObjectList来处理特定的标签列表。但在Try+Finally中执行推荐的.Free时,它也会删除列表中的控件。以下三个标签的简单示例:

1. 过程 GetHeaderLabels(var aList: TObjectList); begin aList.Add('标签1'); aList.Add('标签2'); aList.Add('标签3'); end;

2.过程 GetHeaderLabels(var aList: TObjectList); begin aList.Add('Tag1'); aList.Add('Tag2'); aList.Add('Tag3'); end;

3.过程 GetHeaderLabels(var aList: TObjectList); begin aList.Add('Label1'); aList.Add('Label2'); aList.Add('Label3'); end;

Delphi中释放TObjectList时,为何会连带删除其中的所有控件及其关联资源?

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