【问题标题】:How can un-embed a subform from another form?如何从另一个表单中取消嵌入子表单?
【发布时间】:2016-02-18 03:15:05
【问题描述】:

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

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

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

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

有没有办法从它的容器中取消嵌入这个子表单?

我不想一直销毁这些子表单,而是将它们换掉。

【问题讨论】:

  • 您没有重新设置子表单。你正在把它的孩子变成另一种形式的孩子。因此,您可以通过恢复其原始父级来撤消该操作。您需要跟踪您重新设置父级的每个控件,然后将每个控件的父级设置回原始窗体。不过,整个方法似乎很奇怪。框架不是更好吗?或者可能重新设置整个表单。

标签: delphi firemonkey delphi-xe8


【解决方案1】:

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

MyLayout.Parent := MyContainerInAnotherForm;

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

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

MyLayout.Parent := MyOriginalContainerForm;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2013-01-29
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多