如何存多個元件位址成一個矩陣? |
尚未結案
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
目前有三個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 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
hornacek您好
就我所知強制轉型就是從指標的開頭位址(也就是Test[i]所指的位址)取該型態
的長度,也就是轉成(char *)就取1Byte,轉成(TComboBox *)就取
sizeof(TComboBox)這麼長...
在您的code中TEdit取用TComboBox的長度而不會出錯,我想是因為記憶體位置
剛好符合吧(指Text屬性,其他就不見得了),不過這樣是很危險的(您應該了解的)
POST該連結就是請您參考andychang1690大大或pwipwi大大的做法(其中之一) 參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
引言: 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不知道反過來WM_GETTEXT,要如何使用? |
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |