Deleting an FMXobject inside its event handler

半城伤御伤魂 提交于 2019-12-02 08:17:16

I found something interesting about FreeNotification() method here.

Use FreeNotification to register AComponent as a component that should be notified when the component is about to be destroyed. It is only necessary to register components this way when they are in a different form or have a different owner. For example, if AComponent is in another form and uses the component to implement a property, it must call FreeNotification so that its Notification method is called when the component is destroyed.

For components with the same owner, the Notification method is called automatically when an application explicitly frees the component. This notification is not sent out when components are freed implicitly, because the Owner is already being freed.

And then when I removed the line

a.FreeNotification(self);

In the method (the first component)

procedure Tncrdragdata.additem(Aname:string);

And the problem was gone.

I think the problem is that I was calling the FreeNotification() method with Tdragdata, not having a different owner. Clearly I was breaking a rule.

Thanks to @victoria and @CraigYoung for their help.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!