本來以為動態創建控件很容易,比如,
TTabSheet *NewGroupPage[10];
for( int Page = 0; Page < A;++page )
{
NewGroupPage[Page] = new TTabSheet(this);
NewGroupPage[Page]->PageControl
= MainContainer;
NewGroupPage[Page]->Caption
= "Page " + IntToStr(Page+1);
TLabel *ALabel;
ALabel = new TLabel(this);
ALabel->Parent = NewGroupPage[Page];
ALabel->Caption = "A: ";
ALabel->Font->Size = 12;
ALabel->Left = 7;
ALabel->Top = 5;
ALabel->Width = 145;
ALabel->Height = 24;
TLabel *BLabel;
BLabel = new TLabel(this);
BLabel->Parent = NewGroupPage[Page];
BLabel->Caption = "B : ";
BLabel->Font->Size = 12;
BLabel->Left = 167;
BLabel->Top = 5;
BLabel->Width = 145;
BLabel->Height = 24;
TEdit *AEdit;
AEdit = new TEdit(this);
AEdit->Parent = NewGroupPage[Page];
AEdit->AutoSize = false;
AEdit->Font->Size = 8;
AEdit->Left = 8;
AEdit->Top = 34;
AEdit->Width = 145;
AEdit->MaxLength = 10;
TEdit *BEdit;
BEdit = new TEdit(this);
BEdit->Parent = NewGroupPage[Page];
BEdit->AutoSize = false;
BEdit->Font->Size = 8;
BEdit->Left = 168;
BEdit->Top = 34;
BEdit->Width = 145;
BEdit->MaxLength = 10;
}
玩了半天回來,時間不多了,趕緊寫一段自動寫數到剛自動創建的Edit中:
for( int Page = 0; Page < A;++Page )
{
dynamic_cast < TEdit*>
(
MainContainer->Pages[Page]->Controls[0]
)->Text = "A"; // 寫第一個Edit
dynamic_cast < TEdit*>
(
MainContainer->Pages[Page]->Controls[1]
)->Text = "B"; // 寫第二個Edit
}
運行。 啊?怎麼沒有東西呢?
搗弄了半天,還是不對,只好先下班。
下午接著干,不敢再大意,仔細閱讀了一下Controls的含意。原來,作怪的是,TLabel也占了一個位,要正確地找到TEdit,必須遍歷整個Container.
找到了原因,解決很容易,如:
for( int Page = 0; Page < A;++Page )
{
int Count;
Count
= dynamic_cast< TWinControl* >
(
MainContainer->Pages[ Page ]
)->ControlCount;
for( int i = 0; i < Count;++i )
{
if( dynamic_cast < TEdit*>
(
MainContainer->Pages[Page]->Controls[i]
) != NULL
{
// 此處省略了分別存取各個元件的判別,
//只籠統地在TEdit填入數字,具體地,可加計數器。
dynamic_cast < TEdit*>
(
MainContainer->Pages[Page]->Controls[i]
)->Text = "A";
}
}
}
//-------------------------------------------------------------------------------------
終於搞定.