gpt4 book ai didi

delphi - 为什么我的 TStrings 对象在我的析构函数有机会运行之前就被销毁了?

转载 作者:行者123 更新时间:2023-12-03 14:46:52 25 4
gpt4 key购买 nike

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

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

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

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

destructor TfraImportAttachments.Destroy;
begin

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

inherited;
end;

最佳答案

一个DestroyHandle可能在析构函数之前到达组合框。然后项目就消失了,因为它们没有保存到 TCustomComboBox.FSavedItems列表于 TCustomComboBox.DestroyWnd .

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

解决方案是将项目放入组合框和 TObjectList , TListTList<TObject>取决于你想用它们做什么。因此,所有权位于“代码”列表中,而项目仍然在组合框中引用。

关于delphi - 为什么我的 TStrings 对象在我的析构函数有机会运行之前就被销毁了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13881482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com