1

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

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

这是我的那个按钮的代码。

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

我错过了什么?

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

4

1 回答 1

2

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

一种方法是使用TStream.WriteComponent()andTStream.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-derived 类中,然后在运行时创建该类的实例并将其放置到 each 上TTabSheet,让它为您处理控件,例如:

TTabSheet *NewTabSheet = new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
TMyFrame *NewFrame = new TMyFrame(NewTabSheet);
NewFrame->Parent = NewTabSheet;
pageControlMain->ActivePage = NewTabSheet;
于 2012-04-18T04:16:07.303 回答