如何从另一个表单中取消嵌入子表单?

How can un-embed a subform from another form?

我想交换出现在主窗体容器中的子窗体。

我找到了一种方法,可以将一个表单指定为另一个 here 的子表单,方法是将其父表单设为主表单上的容器。

procedure TParentForm.EmbeddForm(AParent:TControl; AForm:TCustomForm);
begin
    while AForm.ChildrenCount>0 do
        AForm.Children[0].Parent:=AParent;
end;

添加子表单的效果与我预期的差不多;但是,一旦它已经成为子表单,我似乎无法替换它。

nil设置子窗体的父级似乎并不能解决问题,也不能自行设置其父级。

有没有办法从容器中取消嵌入此子表单?

我宁愿不销毁并一直重新创建这些子表单,只是将它们换掉。

在 Firemonkey 中,要嵌入表单,您应该首先将所有控件封装在某种 TLayout 上。然后,您可以将该布局的父级分配给您需要的任何容器。

MyLayout.Parent := MyContainerInAnotherForm;

这样一来,您只有一个(布局的)变量来引用整个 "form"。请记住,FMX 广泛基于布局。

当您想重新分配原始表单时,只需将该布局的父级分配回其原始容器即可。

MyLayout.Parent := MyOriginalContainerForm;