首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态复制页签?

如何动态复制页签?
EN

Stack Overflow用户
提问于 2012-04-17 02:21:19
回答 1查看 1.7K关注 0票数 1

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

现在,我设法复制了表格。但是,新的选项卡表是完全空的。

这是我的按钮代码。

代码语言:javascript
复制
TTabSheet * NewTabSheet= new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
NewTabSheet->Caption = "TabSheet";
pageControlMain->ActivePage = NewTabSheet;

我遗漏了什么?

至于TTabSheets中的组件和函数,它们只是滚动框、编辑、按钮和面板。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-18 12:16:07

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

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

代码语言:javascript
复制
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类上,然后在运行时创建该类的实例并将其放在每个TTabSheet上,让它为您处理控件,例如:

代码语言:javascript
复制
TTabSheet *NewTabSheet = new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
TMyFrame *NewFrame = new TMyFrame(NewTabSheet);
NewFrame->Parent = NewTabSheet;
pageControlMain->ActivePage = NewTabSheet;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10179475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档