我有一个从TFrame扩展的对象.这包含一个TCombobox.
当我的框架被销毁时,我想确保我释放任何相关的对象.然而,当我的析构函数运行时,我可以访问组合框,但它的项目已被删除.
怎么会这样?如何访问析构函数中的项?
我的析构函数看起来像这样;
destructor TfraImportAttachments.Destroy;
begin
MessageDlg(IntToStr(cboCategory.Items.count), mtInformation, [mbOK], 0);
FreeObjects(cboCategory.Items);
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
And*_*den 12
A DestroyHandle可能在析构函数之前到达了组合框.然后项目消失了,因为它们没有保存到TCustomComboBox.FSavedItems列表中TCustomComboBox.DestroyWnd.
组合框Delphi对象仍然存在,但实际控件(通过窗口句柄访问的控件)消失了.通过访问ComboBox.Items,VCL重新创建实际控件,以便它可以检索项目,但是新控件没有任何项目,因此Items.Count返回0.
解决方案是将项目放入组合框和a TObjectList,TList或者TList<TObject>取决于你想要用它们做什么.所以所有权在"代码"列表中,而项目仍在组合框中引用.
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |