簡體   English   中英

將面板控件動態添加到動態選項卡(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 ,該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)'

所以我不知道如何訪問tabPage->Name值,因為那是動態創建的?

DB Baxter構造函數需要一個組件變量/對象,而不是帶有名稱文本的字符串。 如TPanel * panelPage = new TPanel(tabPage); 那對你有用嗎? 您需要制作面板的父tabPage嗎?

通過幫助DB巴克斯特,我認為創建動態的正確和完整的答案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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM