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

如何存多個元件位址成一個矩陣?

尚未結案
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-01 15:27:04 IP:61.63.xxx.xxx 未訂閱
目前有三個TComboBox及三個TEdit的元件,由於要指定其Text屬性如下:
AnsiString Temp[6];
ComboBox1->Text = Temp[0];
ComboBox2->Text = Temp[1];
ComboBox3->Text = Temp[2];
Edit1->Text = Temp[3];
Edit2->Text = Temp[4];
Edit3->Text = Temp[5];
想要把它寫成一個迴圈,如果可以把這六個元件的位址存到一個矩陣,如:
int i;
SomeClass *Test[6];
AnsiString Temp[6];
for (i=0; i<6;   i)
    Test[i]->Text = Temp[i];
不知道那個SomeClass是啥?可以這樣寫嗎?謝謝!
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-01 16:17:52 IP:203.70.xxx.xxx 未訂閱
hornacek您好 我想TList元件是個選擇 TList *list = new TList; list->Add(ComboBox1); 取用時 list->Items[0];    還可以搭配FindComponent()節省更多程式碼...    另外,取用屬性時,要注意轉型的問題,或參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=53922 參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ 發表人 -
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-01 23:14:28 IP:220.139.xxx.xxx 未訂閱
引言: hornacek您好 我想TList元件是個選擇 TList *list = new TList; list->Add(ComboBox1); 取用時 list->Items[0]; 還可以搭配FindComponent()節省更多程式碼... 另外,取用屬性時,要注意轉型的問題,或參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=53922 參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ 發表人 - >< face="Verdana, Arial, Helvetica"> ENIX007你好,經過你的提醒,我把我的程式碼改成如下
int i;
AnsiString Temp[6];
TControl *Test[6];    Test[0] = (TControl*)ComboBox1;
Test[1] = (TControl*)ComboBox2;
Test[2] = (TControl*)ComboBox3;
Test[3] = (TControl*)Edit1;
Test[4] = (TControl*)Edit2;
Test[5] = (TControl*)Edit3;    for (i=0; i<6; i  )
    ((TComboBox*)Test[i])->Text = Temp[i];
這樣作的結果是可以正常運作,不過讓我覺得疑惑的是最後一行,為什麼TEdit的物件可以強制轉成TComboBox,而且還可以使用?這一點真是奇怪?到底強制轉型時作了什麼?雖然Text都是由TControl繼承下來的,可是由於Text在TControl是不能存取的,所以只好把它轉成TComboBox。不知道大大可以幫我解惑嗎?謝謝!
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-02 08:55:31 IP:203.70.xxx.xxx 未訂閱
hornacek您好 就我所知強制轉型就是從指標的開頭位址(也就是Test[i]所指的位址)取該型態 的長度,也就是轉成(char *)就取1Byte,轉成(TComboBox *)就取 sizeof(TComboBox)這麼長... 在您的code中TEdit取用TComboBox的長度而不會出錯,我想是因為記憶體位置 剛好符合吧(指Text屬性,其他就不見得了),不過這樣是很危險的(您應該了解的) POST該連結就是請您參考andychang1690大大或pwipwi大大的做法(其中之一)    參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-02 09:58:07 IP:220.135.xxx.xxx 未訂閱
引言: hornacek您好 就我所知強制轉型就是從指標的開頭位址(也就是Test[i]所指的位址)取該型態 的長度,也就是轉成(char *)就取1Byte,轉成(TComboBox *)就取 sizeof(TComboBox)這麼長... 在您的code中TEdit取用TComboBox的長度而不會出錯,我想是因為記憶體位置 剛好符合吧(指Text屬性,其他就不見得了),不過這樣是很危險的(您應該了解的) POST該連結就是請您參考andychang1690大大或pwipwi大大的做法(其中之一) 參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ < face="Verdana, Arial, Helvetica"> 根據pwipwi大大的作法得到
int i;
AnsiString Temp[6];
TControl *Test[6];    Test[0] = dynamic_cast(ComboBox1);
Test[1] = dynamic_cast(ComboBox2);
Test[2] = dynamic_cast(ComboBox3);
Test[3] = dynamic_cast(Edit1);
Test[4] = dynamic_cast(Edit2);
Test[5] = dynamic_cast(Edit3);    for (i=0; i<6; i  )
    Text[i]->Perform(WM_SETTEXT, 0, (int)Temp[i].c_str());
不知道反過來WM_GETTEXT,要如何使用?
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-02 10:44:59 IP:203.70.xxx.xxx 未訂閱
hornacek您好 請參考Help,應該不難的... 一個簡單的例子供您參考 >>
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
系統時間:2024-05-06 5:59:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!