加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:10:19 所属栏目:大数据 来源:网络整理
导读:我使用TObjectList来处理特定的标签列表.但是当我在Try Final中执行推荐的.Free时,它也会删除列表中的控件. 3个标签的简单示例: Procedure GetHeaderLabels(var aList:TObjectListTLabel);begin aList.Add(Form1.lblHeaderCars); aList.Add(Form1.lblHeader
我使用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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读