請問一個關於副程式的問題 |
答題得分者是:boss.tw
|
marmot00
一般會員 發表:2 回覆:4 積分:1 註冊:2009-01-08 發送簡訊給我 |
FindComponent()這個函式,就想把它加進我的程式內用
但放在Button1Click內時還能使用,放進副程式裡就不能用了 想請教一下我是不是還要再加上些什麼東西才能讓FindComponent()在副程式中執行呢? 對不起這個問題可能非常基本,但我用了所有我想得到的關鍵字搜尋都找不到… 以下是我的程式: [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" int Counter[3][9][64]; void Refresh(); //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i=1;i<=3;i ) for (int j=1;j<=6;j ) Counter[i][j][1]=j; } //--------------------------------------------------------------------------- void Refresh() { for (int i=1;i<=3;i ) for (int j=1;j<=6;j ) ((TEdit *)FindComponent("C" IntToStr(i) IntToStr(j))) ->Text = Counter[i][j][1]; } [/code]
------
Axel |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
int Counter[3][9][64]; // 三維陣列, 各維各有 3,9,64 個元素, 各 Index 為 0~2,0~8,0~63.
您發現 for 迴圈超出 Index 範圍了嗎? void Refresh(); // 此種宣告, 表示它不是 TForm1 的成員. void __fastcall TForm1::Refresh(); // 此種宣告, 表示它是 TForm1 的成員. 又, Refresh 為 TQuery 等元件之 Method, 為避免看程式的人發生混淆, 建議改名為: EditRefresh() 較妥當. 因 Refresh() 不是 TForm1 的成員, 則 FindComponent() 要找那個 Form 的? 若改為 Refresh(TForm *FormActive) 便可知到要找那個 Form 上的 Component. ((TEdit *)(FormActive->FindComponent)("C" IntToStr(i) IntToStr(j))) ->Text = Counter[i][j][1]; 或將 Refresh() 改為 TForm1 的成員的方式, 便免傳 FormActive. |
marmot00
一般會員 發表:2 回覆:4 積分:1 註冊:2009-01-08 發送簡訊給我 |
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
我試了可以,應該是你的名字 Refresh 跟 Form1->Refresh(); 一樣吧
請看以下code [code cpp] int Counter[3][9][64]; void eRefresh(TForm *FormActive); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Refresh(); //注意這function名字 } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i=1;i<=3;i ) for (int j=1;j<=6;j ) Counter[i][j][1]=j; } //--------------------------------------------------------------------------- void eRefresh(TForm *FormActive) { for (int i=1;i<=3;i ) for (int j=1;j<=6;j ) ((TEdit *)(FormActive->FindComponent)("C" IntToStr(i) IntToStr(j)))->Text = Counter[i][j][1]; } void __fastcall TForm1::Button2Click(TObject *Sender) { eRefresh(Form1); } //--------------------------------------------------------------------------- [/code] ===================引 用 marmot00 文 章=================== 先謝謝您的回覆, 但如果我用void __fastcall TForm1::Refresh(); 宣告, 會顯示訊息: __fastcall TForm1::Refresh() is not a member of 'TForm1' 用您提供的第二個方式的話程式可以執行,但無法呼叫函式, 我設 Breakpoint看發現執行到 Refresh(); 的時候直接跳過去了 我想是不是我的用法錯誤,少了些什麼呢? |
marmot00
一般會員 發表:2 回覆:4 積分:1 註冊:2009-01-08 發送簡訊給我 |
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
void __fastcall TForm1::XXXX(...) 必須在 Form1.h 檔之 private 段做宣告,
宣告時不要加『TForm1::』。 括號內加入Form1的原理: 指定要找那一個 Form 的 Component。 因為, FindComponent() 是 TForm 的 Method, 且只找該 Form 上的 Component; 它不是這個 Form1.cpp 的 Method, 故要傳參數給該函式. 另外大家很在意積分嗎? 若真的在意積分, 就不會常來此答題了! 您覺得誰幫您最大的忙, 就給誰! 結案只是表示對答題人及自己的尊重! |
marmot00
一般會員 發表:2 回覆:4 積分:1 註冊:2009-01-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |