全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1723
推到 Plurk!
推到 Facebook!

讓元件名稱變成變數...

答題得分者是:GGump
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-25 21:07:02 IP:140.126.xxx.xxx 未訂閱
我有一些元件是建立在動態視窗上面


[code cpp]
TMask3X3 *MaskWindows=new TMask3X3(this);

MaskWindows->Edit1->Text = ImageOP.Mask3X3[0];
MaskWindows->Edit2->Text = ImageOP.Mask3X3[1];
MaskWindows->Edit3->Text = ImageOP.Mask3X3[2];
MaskWindows->Edit4->Text = ImageOP.Mask3X3[3];
:
:
MaskWindows->ShowModal();

ImageOP.Mask3X3[0] = StrToInt(MaskWindows->Edit1->Text);
ImageOP.Mask3X3[1] = StrToInt(MaskWindows->Edit2->Text);
ImageOP.Mask3X3[2] = StrToInt(MaskWindows->Edit3->Text);
ImageOP.Mask3X3[3] = StrToInt(MaskWindows->Edit4->Text);
:
:
delete MaskWindows;

[/code]
不在動態宣告視窗時我是使用FindComponent方式來達成一次控制很多元件

[code cpp]
TEdit *EditN;
for(int i = 1; i < 5; i )
{
AnsiString EditName;
EditName = "Series" IntToStr(i);
EditN = (TEdit*) FindComponent(EditName);
Data[i] = EditN->Text[i];
}
delete EditN;

[/code]
但是在動態視窗下我卻不知道該如何做到
因為程式總是告訴我沒有這個物件
請問該怎麼做呢
GGump
一般會員


發表:2
回覆:16
積分:8
註冊:2006-08-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-17 18:19:24 IP:118.166.xxx.xxx 訂閱

===================引 用 hipig 文 章===================
我有一些元件是建立在動態視窗上面


[code cpp]
TMask3X3 *MaskWindows=new TMask3X3(this);

MaskWindows->Edit1->Text = ImageOP.Mask3X3[0];
MaskWindows->Edit2->Text = ImageOP.Mask3X3[1];
MaskWindows->Edit3->Text = ImageOP.Mask3X3[2];
MaskWindows->Edit4->Text = ImageOP.Mask3X3[3];
:
:
MaskWindows->ShowModal();

ImageOP.Mask3X3[0] = StrToInt(MaskWindows->Edit1->Text);
ImageOP.Mask3X3[1] = StrToInt(MaskWindows->Edit2->Text);
ImageOP.Mask3X3[2] = StrToInt(MaskWindows->Edit3->Text);
ImageOP.Mask3X3[3] = StrToInt(MaskWindows->Edit4->Text);
:
:
delete MaskWindows;

[/code]
不在動態宣告視窗時我是使用FindComponent方式來達成一次控制很多元件

[code cpp]
TEdit *EditN;
for(int i = 1; i < 5; i )
{
AnsiString EditName;
EditName = "Series" IntToStr(i);
EditN = (TEdit*) FindComponent(EditName);
Data[i] = EditN->Text[i];
}
delete EditN;

[/code]
但是在動態視窗下我卻不知道該如何做到
因為程式總是告訴我沒有這個物件
請問該怎麼做呢

對於你動態產生的物件,要讓它們屬性動態的視窗,你必須把從屬關係設好,
例如你提供的例子:你是動態產生 5 個AnsiString 物件來存物件名,再把它們設給TEdit
我改成動態產生 5 個TEdit 物件,現在再設法把它們放入MaskWindows

[code cpp]
TMask3X3* MaskWindows = new TMask3X3(this);
TEdit* EditN;
AnsiString EditName;
for (int i = 1; i < 5; i )
{
EditN = new TEdit(
MaskWindows);
EditName = "Series" AnsiString(i); // 我偏好用AnsiString()的constructor來自動轉成字串,而不用IntToStr()
EditN->Name =
EditName;
EditN->Parent = MaskWindows;
}

// EditN = (TEdit*) FindComponent(EditName); // 取得特定的物件依然可以用此法
// Data[i] = EditN->Text[i]; // 不是很清楚這行原本的目的,所以暫時擱在這裡

delete EditN; // 如果是這樣new出來的,似乎光這樣不會完全清乾淨,這部分得再請其他人提供說明了

delete MaskWindows;
[/code]
編輯記錄
GGump 重新編輯於 2008-08-17 18:22:00, 註解 無‧
系統時間:2024-04-20 17:06:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!