class傳直到副程式的問題 |
尚未結案
|
雞排
一般會員 發表:16 回覆:40 積分:11 註冊:2004-03-10 發送簡訊給我 |
請問 怎樣可以按button把在edit取得的值 傳到KEYCHECK()裡面判斷?
照書上的範例弄了半天 還是沒辦法...
int key_size=4; AnsiString str; class Choose { public: int k; int passable; }; void __fastcall TForm1::Edit1Change(TObject *Sender) { long len,tmp,i; bool b=true; Choose key[10]; len = Edit1->Text.Length(); tmp = Edit1->Text.ToInt(); Form1->Memo1->SelText=str; key[0].k=tmp; for(i=len;i>0;i--) { key[i].k=tmp; tmp=tmp/10; Form1->Memo1->SelText=key[i].k; } } //----------------------------------------------------------- void KEYCHECK(Choose key[]) { int i,j,len; bool b=true; len = Form1->Edit1->Text.Length(); if(len>3) { for(i=1;i<=len;i ) { for(j=2;j<=len;j ) { if(i j<=len && b==true) { if(key[i].k==key[i j].k) { ShowMessage("輸入格式錯誤 請重新輸入"); Form1->Edit1->Clear(); b=false; break; } } } } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ? } //--------------------------------------------------------------------一個不該是程式新手的新手 /.\ |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
雞排你好:
程式看了半天,可能沒完全懂你的程式目的,所以就先回應看看。如果不行再討論吧。 1.
首先是Choose key[10];你應該是希望Edit1Change的key[10],在button1按下時會送給keycheck吧?(不知道我猜得對不對?)但是Edit1Change中的key是local變數,所以Edit1Change結束後,key[10]就是不存在的。當button1按下時,當然也沒有key可以傳給keycheck。
最直覺的解決的方法是把key宣告在TForm1裡的protected區。當button1按下時,就可以把key[10]傳給keycheck。
//---------------------------------------------
2.Keycheck這個function有用到vcl,所以要記得宣告時要加個__fastcall
void __fastcall KEYCHECK(Choose key[])還有可以的話,把Keycheck宣告在Form1的protected。 (抱歉我對全域function會過敏) //--------------------------------------------- class="code"> checknumber[0][1]=str.c_str(); 是行不通的,因為左邊是int,右邊是c的字串(應該說是字串的位置)。不能直接轉換的。 試用下面的方法 checknumber[0][1]=StrToInt(Edit2->Text); |
雞排
一般會員 發表:16 回覆:40 積分:11 註冊:2004-03-10 發送簡訊給我 |
引言: 雞排你好: 程式看了半天,可能沒完全懂你的程式目的,所以就先回應看看。如果不行再討論吧。 1. 首先是Choose key[10];你應該是希望Edit1Change的key[10],在button1按下時會送給keycheck吧?(不知道我猜得對不對?)但是Edit1Change中的key是local變數,所以Edit1Change結束後,key[10]就是不存在的。當button1按下時,當然也沒有key可以傳給keycheck。 最直覺的解決的方法是把key宣告在TForm1裡的protected區。當button1按下時,就可以把key[10]傳給keycheck。 //--------------------------------------------- 2.Keycheck這個function有用到vcl,所以要記得宣告時要加個__fastcall感謝回覆 因為覺得自己寫程式太侷限以前的寫法 全部靠全域變數在傳值 所以想說嘗試一下別的寫法 沒想到困難重重 /.關於第一點 沒錯 我是想把key值傳給button 我會改進問問題的技巧的 protected 是要自己新增嗎? 我不太懂.h的設定 書上也都沒提... bcb預設是這三個 __published: private: public: 我習慣上是把東西都放在public裡 不過依然不行 可能是宣告錯誤吧 我再試試 第二點 Keycheck這個function有用到vcl? 請問是哪 我自己都不知道我有用到VCL 因為我用len = Form1->Edit1->Text.Length(); 去取得len嗎? 第三 checknumber[0][1] 我是宣告成char 這是最想哭的地方 因為有些需要 很難用不熟的string去作 所以想把str轉存在array裡 而且不是分開存 因為把每個字元分開 我有找到strcpy來作了 如果不麻煩的話 希望能再次回答 感謝 我也很想改掉用全域的習慣阿..... 一個不該是程式新手的新手 /. 發表人 - 雞排 於 2004/05/16 23:37:27void __fastcall KEYCHECK(Choose key[])還有可以的話,把Keycheck宣告在Form1的protected。 (抱歉我對全域function會過敏) //--------------------------------------------- class="code"> checknumber[0][1]=str.c_str(); 是行不通的,因為左邊是int,右邊是c的字串(應該說是字串的位置)。不能直接轉換的。 試用下面的方法checknumber[0][1]=StrToInt(Edit2->Text); |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
引言:雞排你好: 1.關於protected作用…他和private很像,不同點是在如果用到繼承的功能時,private的東西沒法子被繼承,而protected可以。你可以先試試宣告在public或private裡面,用法沒差多少的。 2.對不起我說錯了,keycheck不必加fastcall。(差點誤了人...)加fastcall的地方只有兩種,一個是event handle,另一個是callback function。其他地方,不加最好。因為fastcall比傳統的c,pascal,c 的呼叫都還要慢… 3.char和char*是不太一樣的,前者是宣告為單一字元,後者是宣告為字元的指標。在c的用法上,字串的代表就是第一個字元的位置,也就是第一個字元的指標。 比如引言: 雞排你好: 程式看了半天,可能沒完全懂你的程式目的,所以就先回應看看。如果不行再討論吧。 1. 首先是Choose key[10];你應該是希望Edit1Change的key[10],在button1按下時會送給keycheck吧?(不知道我猜得對不對?)但是Edit1Change中的key是local變數,所以Edit1Change結束後,key[10]就是不存在的。當button1按下時,當然也沒有key可以傳給keycheck。 最直覺的解決的方法是把key宣告在TForm1裡的protected區。當button1按下時,就可以把key[10]傳給keycheck。 //--------------------------------------------- 2.Keycheck這個function有用到vcl,所以要記得宣告時要加個__fastcall感謝回覆 因為覺得自己寫程式太侷限以前的寫法 全部靠全域變數在傳值 所以想說嘗試一下別的寫法 沒想到困難重重 /.關於第一點 沒錯 我是想把key值傳給button 我會改進問問題的技巧的 protected 是要自己新增嗎? 我不太懂.h的設定 書上也都沒提... bcb預設是這三個 __published: private: public: 我習慣上是把東西都放在public裡 不過依然不行 可能是宣告錯誤吧 我再試試 第二點 Keycheck這個function有用到vcl? 請問是哪 我自己都不知道我有用到VCL 因為我用len = Form1->Edit1->Text.Length(); 去取得len嗎? 第三 checknumber[0][1] 我是宣告成char 這是最想哭的地方 因為有些需要 很難用不熟的string去作 所以想把str轉存在array裡 而且不是分開存 因為把每個字元分開 我有找到strcpy來作了 如果不麻煩的話 希望能再次回答 感謝 我也很想改掉用全域的習慣阿..... 一個不該是程式新手的新手 /. 發表人 - 雞排 於 2004/05/16 23:37:27void __fastcall KEYCHECK(Choose key[])還有可以的話,把Keycheck宣告在Form1的protected。 (抱歉我對全域function會過敏) //--------------------------------------------- class="code"> checknumber[0][1]=str.c_str(); 是行不通的,因為左邊是int,右邊是c的字串(應該說是字串的位置)。不能直接轉換的。 試用下面的方法checknumber[0][1]=StrToInt(Edit2->Text); char str[10]; //其中的str就等於&str[0]所以當你要用一個陣列來存放字串時,不能宣告成char而要宣告為char* 另外還有一點,AnsiString的c_str()傳回的字串指標,只能拿來做暫時的使用,不要拿來改變,或是把他的本體存下來。不然在你想不到的地方,就會出錯的。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |