如何在自己的事件中释放控件?

How to free a control in its own event?

我在 FMX 应用程序中有一个 TPanels 的列表,如果我单击它,我想释放一个面板。

直接在 Onclick-handler 中释放它们不是正确的方法,因为我遇到了访问冲突。而且我不想使用 windowsmessages(在 How to free control inside its event handler? and Why does my program crash when I destroy a button in its own OnClick handler? 中推荐),因为它是一个 firemonkey 应用程序,我不知道这些消息如何在 android 和 mac 上工作。

还有其他解决方案吗?

使用myObject.Release:

Marks this TFmxObject object for delayed deletion.

此方法中的立即操作:

  • 设置父级 = nil
  • 将对象插入延迟删除列表

延迟行动:

  • 从列表 (vPurgatory) 中释放对象。

请记住,该方法 Free(和过程 FreeAndNil)不会删除移动平台中的对象本身:

// under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear