delphi – 为什么我的TStrings对象在析构函数有机会运行之前被销
发布时间:2020-12-15 04:18:34 所属栏目:大数据 来源:网络整理
导读:我有一个从TFrame扩展的对象.这包含一个TCombobox. 我希望确保在我的框架被销毁时释放任何相关对象.然而,当我的析构函数运行时,我可以访问组合框,但它的项目已被删除. 怎么会这样?如何访问析构函数中的项? 我的析构函数看起来像这样; destructor TfraImpor
我有一个从TFrame扩展的对象.这包含一个TCombobox.
我希望确保在我的框架被销毁时释放任何相关对象.然而,当我的析构函数运行时,我可以访问组合框,但它的项目已被删除. 怎么会这样?如何访问析构函数中的项? 我的析构函数看起来像这样; destructor TfraImportAttachments.Destroy; begin MessageDlg(IntToStr(cboCategory.Items.count),mtInformation,[mbOK],0); FreeObjects(cboCategory.Items); inherited; end; 解决方法
DestroyHandle可能在析构函数之前到达了组合框.然后项目消失了,因为它们没有保存到TCustomComboBox.DestroyWnd中的TCustomComboBox.FSavedItems列表中.
组合框Delphi对象仍然存在,但实际控件(通过窗口句柄访问的控件)消失了.通过访问ComboBox.Items,VCL重新创建实际控件,以便它可以检索项目,但是新控件没有任何项目,因此Items.Count返回0. 解决方案是将项目放入组合框和TObjectList,TList或TList< TObject>取决于你想用它们做什么.所以所有权在“代码”列表中,而项目仍在组合框中引用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |