如何动态复制选项卡?

时间:2012-04-16 18:21:19

标签: c++builder tpagecontrol ttabsheet

我有TPageControl TTabSheet。在TTabSheet我有一堆功能和组件。我想在运行时通过一个按钮复制该tabSheet,其中所有功能和组件仍在其中并且正常工作。

现在我设法复制了标签页。但是,新的标签页完全是空的。

以下是该按钮的代码。

TTabSheet * NewTabSheet= new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
NewTabSheet->Caption = "TabSheet";
pageControlMain->ActivePage = NewTabSheet;

我错过了什么?

至于TTabSheets内部的组件和功能,它们只是滚动条,编辑,按钮和面板。

1 个答案:

答案 0 :(得分:2)

TTabSheet类本身没有任何子控件,这就是您没有看到任何内容的原因。您必须实例化每个单独的控件并复制其数据。

这样做的一种方法是使用TStream.WriteComponent()TStream.ReadComponent()方法将源TTabSheet保存到临时DFM中,然后将其加载到新的TTabSheet中,例如:

TMemoryStream *Strm = new TMemoryStream;
Strm->WriteComponent(SourceTabSheet);
Strm->Position = 0;
TTabSheet *NewTabSheet = new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
Strm->ReadComponent(NewTabSheet);
pageControlMain->ActivePage = NewTabSheet;
delete Strm;

另一个选择是在设计时将组件放到TFrame派生类上,然后在运行时创建该类的实例并将其放在每个TTabSheet上,让它处理对你的控制,例如:

TTabSheet *NewTabSheet = new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
TMyFrame *NewFrame = new TMyFrame(NewTabSheet);
NewFrame->Parent = NewTabSheet;
pageControlMain->ActivePage = NewTabSheet;