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

时间:2019-01-08 00:21:38

标签: c++builder vlc tpanel rad-studio ttabsheet

我在获取tabPage->Name值时遇到问题,因为它将在用户单击按钮时生成,我的代码的第一段将在PageControl3内创建新的标签页,然后使用{{1} }通过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; 内创建新的TPanel,但是它将无法正常工作。

tabpage->Name

错误信息:

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)' 值,因为那是动态创建的?

1 个答案:

答案 0 :(得分:0)

DB Baxter构造函数需要一个组件变量/对象,而不是带有名称文本的字符串。如TPanel * panelPage = new TPanel(tabPage);那对你有用吗?您需要制作面板的父tabPage吗?

通过帮助DB Baxter,我认为在动态TPanel中创建动态TTabSheet的正确而完整的答案将需要一个组件变量/对象,然后显示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();

我希望这段代码可以帮助任何人生成带有面板的动态标签页,顺便说一句,如果您想为其添加一些框架,则应使用以下代码:

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

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