8

我有一个从 TFrame 扩展的对象。这包含一个 TCombobox。

我想确保在我的框架被销毁时释放任何关联的对象。但是,当我的析构函数运行时,我可以访问组合框,但它的项目已被清除。

这会做什么?如何访问析构函数中的项目?

我的析构函数看起来像这样;

destructor TfraImportAttachments.Destroy;
begin

  MessageDlg(IntToStr(cboCategory.Items.count), mtInformation, [mbOK], 0);
  FreeObjects(cboCategory.Items);

  inherited;
end;
4

1 回答 1

12

ADestroyHandle可能在析构函数之前到达组合框。然后项目消失了,因为它们没有保存TCustomComboBox.FSavedItemsTCustomComboBox.DestroyWnd.

组合框 Delphi 对象仍然存在,但实际控件(通过窗口句柄访问的控件)消失了。通过访问 ComboBox.Items,VCL 重新创建了实际的控件,以便它可以检索项目,但该新控件没有任何项目,因此Items.Count返回 0。

一种解决方案是将项目放入组合框和 aTObjectList中,TList或者TList<TObject>取决于您想对它们做什么。因此,所有权在“代码”列表中,而项目仍在组合框中引用。

于 2012-12-14T16:31:25.370 回答