将面板控件动态添加到动态选项卡(C++ Builder Rad Studio)?

Dynamically add panel control to a dynamic tabsheet (C++ Builder Rad Studio)?

我在获取 tabPage->Name 值时遇到问题,因为它会在用户单击按钮时生成,我的代码的第一个块将在 PageControl3 内创建新的标签表,然后我使用 static int tabNumber; 通过 if 条件生成 tabPage->Caption 然后我动态地使用 tabPage->Name 的标题。

我需要该标签页的名称才能将其传递到错误行。

static int tabNumber;
if (tabNumber >= 1) ++tabNumber;
else tabNumber = 1;
PageControl3->Visible = true;
TTabSheet *tabPage = new TTabSheet(PageControl3);
tabPage->PageControl = PageControl3;
tabPage->Caption = UnicodeString("Untitled") + IntToStr(tabNumber);
tabPage->Name = UnicodeString("ts") + tabPage->Caption;

我的代码的第二部分应该在上面代码部分创建的当前 tabpage->Name 中创建新的 TPanel,但它不起作用。

TPanel *panelPage = new TPanel(tabPage->Name); // Error Line
panelPage->Align = alClient;
panelPage->Name = UnicodeString("panel") + tabPage->Caption;

错误消息:

[bcc32 Error] mainUnit.cpp(50): E2285 Could not find a match for 'TPanel::TPanel(const UnicodeString)'

所以我不知道如何访问 tabPage->Name 值,因为它是动态创建的?

DB Baxter 构造函数需要一个组件 variable/object 而不是带有名称文本的字符串。如TPanel *panelPage = new TPanel(tabPage);这对你有用吗?是否需要让面板的父标签页?

通过帮助 DB Baxter,我认为在动态 TTabSheet 中创建动态 TPanel 的正确和完整的答案将需要一个组件 variable/object 然后显示 TPanel 我们应该使用 whatever->show(); 命令,完整的代码可以像这样:

static int tabNumber = 0;
if (tabNumber >= 1) {
    ++tabNumber;
} else {
    tabNumber = 1;
    PageControl3->Visible = true;
}
// create new tab sheet inside PageControl3
TTabSheet *tabSheet = new TTabSheet(PageControl3);
tabSheet->PageControl = PageControl3;
tabSheet->Caption = UnicodeString("Untitled") + IntToStr(tabNumber);
tabSheet->Name = UnicodeString("ts") + tabSheet->Caption;

// create new panel inside the current tab sheet
TPanel *panelBox = new TPanel(tabSheet);
panelBox->Parent = tabSheet;
panelBox->Align = alClient;
panelBox->Name = UnicodeString("panelPage") + IntToStr(tabNumber);
panelBox->BevelOuter = bvNone;
panelBox->ShowCaption = true;
panelBox->Caption = UnicodeString("panel") + tabSheet->Caption;
panelBox->Show();

我希望这段代码可以帮助任何人使用面板生成动态选项卡 sheet,顺便说一句,如果你想给它添加一些框架,应该使用下面的代码:

// adding the registration frame to the panel
TregFrame *newRegistration = new TregFrame(panelBox);
newRegistration->Parent = panelBox;
newRegistration->Align  = alClient;

注意:不要忘记在您的工作文件中包含您的框架,例如 #include "registrationFrame.h"