【发布时间】:2010-11-23 02:59:55
【问题描述】:
我在主窗体中有页面控件,在子窗体中有页面控件,我 使用停靠功能将子窗体放置在主窗体内。
我没有使用 MDI 样式
现在两个表单在页面控件中都有选项卡,我需要合并子表单 选项卡进入主表单页面控件,最好的方法是什么?
【问题讨论】:
标签: delphi tabbed-document-interface
我在主窗体中有页面控件,在子窗体中有页面控件,我 使用停靠功能将子窗体放置在主窗体内。
我没有使用 MDI 样式
现在两个表单在页面控件中都有选项卡,我需要合并子表单 选项卡进入主表单页面控件,最好的方法是什么?
【问题讨论】:
标签: delphi tabbed-document-interface
处理页面控件上的多个选项卡的最简单和最好的方法通常是使用框架。获取每个选项卡的内容并将它们分解到每个选项卡的单独框架中。将任何共享组件、状态和代码移动到数据模块。然后只需将这些框架放在页面控件的选项卡上即可。
【讨论】:
这是一种相当简单的方法,可能适合也可能不适合您的需求。
对于您需要合并的每个子标签页:
在主表单页面中创建一个选项卡 子控件对应的控件 标签
遍历 Controls 中的 子标签并更改父 属性到你刚刚的标签页 已创建
您不需要处理其他控件的子控件。例如如果您的子标签中有一个分组框,那么更改它的父标签会将它和其中的所有控件都带到新的父标签中。
如果您需要能够在任何时候“取消合并”您的选项卡,那么您将需要设计一些机制来跟踪控件的来源,以便您可以将原始 Parent 恢复为/当需要时。
为了让事情稍微简单一些,您可以在子标签中放置一个 TPanel,并将其 Align 属性设置为 alClient。将所有控件放在该面板上的选项卡中,然后当您需要合并/取消合并时,您只需设置面板控件的 Parent。
【讨论】:
我刚试过
procedure TForm1.Button1Click(Sender: TObject);
begin
while Form2.PageControl1.PageCount > 0 do
Form2.PageControl1.Pages[0].PageControl := PageControl1;
end;
而且效果很好。我是否遗漏了一些明显的东西,或者为什么每个人都提供如此复杂的解决方案? :-)
【讨论】: