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

class傳直到副程式的問題

尚未結案
雞排
一般會員


發表:16
回覆:40
積分:11
註冊:2004-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-15 23:03:41 IP:210.68.xxx.xxx 未訂閱
請問 怎樣可以按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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-16 21:16:41 IP:211.76.xxx.xxx 未訂閱
雞排你好:     程式看了半天,可能沒完全懂你的程式目的,所以就先回應看看。如果不行再討論吧。    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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-16 23:34:28 IP:210.68.xxx.xxx 未訂閱
引言: 雞排你好: 程式看了半天,可能沒完全懂你的程式目的,所以就先回應看看。如果不行再討論吧。 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);
感謝回覆 因為覺得自己寫程式太侷限以前的寫法 全部靠全域變數在傳值 所以想說嘗試一下別的寫法 沒想到困難重重 /.關於第一點 沒錯 我是想把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:27
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-17 11:27:41 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 雞排你好: 程式看了半天,可能沒完全懂你的程式目的,所以就先回應看看。如果不行再討論吧。 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);
感謝回覆 因為覺得自己寫程式太侷限以前的寫法 全部靠全域變數在傳值 所以想說嘗試一下別的寫法 沒想到困難重重 /.關於第一點 沒錯 我是想把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:27
雞排你好: 1.關於protected作用…他和private很像,不同點是在如果用到繼承的功能時,private的東西沒法子被繼承,而protected可以。你可以先試試宣告在public或private裡面,用法沒差多少的。 2.對不起我說錯了,keycheck不必加fastcall。(差點誤了人...)加fastcall的地方只有兩種,一個是event handle,另一個是callback function。其他地方,不加最好。因為fastcall比傳統的c,pascal,c 的呼叫都還要慢… 3.char和char*是不太一樣的,前者是宣告為單一字元,後者是宣告為字元的指標。在c的用法上,字串的代表就是第一個字元的位置,也就是第一個字元的指標。 比如
char str[10];
//其中的str就等於&str[0]
所以當你要用一個陣列來存放字串時,不能宣告成char而要宣告為char* 另外還有一點,AnsiString的c_str()傳回的字串指標,只能拿來做暫時的使用,不要拿來改變,或是把他的本體存下來。不然在你想不到的地方,就會出錯的。
系統時間:2024-04-26 17:54:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!