我有TPageControl
TTabSheet
。在TTabSheet
我有一堆功能和组件。我想在运行时通过一个按钮复制该tabSheet,其中所有功能和组件仍在其中并且正常工作。
现在我设法复制了标签页。但是,新的标签页完全是空的。
以下是该按钮的代码。
TTabSheet * NewTabSheet= new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
NewTabSheet->Caption = "TabSheet";
pageControlMain->ActivePage = NewTabSheet;
我错过了什么?
至于TTabSheets内部的组件和功能,它们只是滚动条,编辑,按钮和面板。
答案 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;