請問button的form怎麼傳送參數到FormCreate裡 |
答題得分者是:carstyc
|
js80875
一般會員 發表:2 回覆:2 積分:0 註冊:2008-12-17 發送簡訊給我 |
我想要由input_ok的button經過字元判斷來傳送參數,
符合的傳送到FormCreate裡的接收條件, 想要傳送int 不曉得要用什麼指令, [code cpp] void __fastcall TForm1::FormCreate(TObject *Sender) { AnsiString s; float x; 接收條件 =0; while(接收條件 == 1){ x=StrToFloat(x_input->Text); s.printf("%2.2f",x); printf("%2.2f",x); info1->Lines->Add(s); } } void __fastcall TForm1::input_okClick(TObject *Sender) { if(x_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ 傳送參數 } } [/code] 編輯記錄
js80875 重新編輯於 2009-06-09 03:05:20, 註解 無‧
js80875 重新編輯於 2009-06-09 03:06:30, 註解 無‧ js80875 重新編輯於 2009-06-09 03:07:30, 註解 無‧ js80875 重新編輯於 2009-06-09 03:08:49, 註解 到FormCreate裡的while‧ js80875 重新編輯於 2009-06-09 03:11:25, 註解 無‧ js80875 重新編輯於 2009-06-09 05:59:48, 註解 無‧ js80875 重新編輯於 2009-06-09 06:40:55, 註解 無‧ taishyang 重新編輯於 2009-06-09 09:57:31, 註解 刪除[急急急]‧ |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
如ikk大大所講的, FormCreate 只會執行一次。
你要做的應該是把 FormCreate 要做的事,寫成另一個 procedure ,然後在 FormCreate 時去呼叫它 [code cpp] void __fastcall TForm1::FormCreate(TObject *Sender) { myprocedure(1); } void __fastcall TForm1::input_okClick(TObject *Sender) { if(x_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ myprocedure(1); } } void __fastcall TForm1::myprocedure(int nIn) { AnsiString s; float x; 接收條件 =0; while(接收條件 == 1){ x=StrToFloat(x_input->Text); s.printf("%2.2f",x); printf("%2.2f",x); info1->Lines->Add(s); } } [/code] ===================引 用 js80875 文 章=================== 我想要由input_ok的button經過字元判斷來傳送參數, 符合的傳送到FormCreate裡的接收條件, 想要傳送int 不曉得要用什麼指令, [code cpp] void __fastcall TForm1::FormCreate(TObject *Sender) { AnsiString s; float x; 接收條件 =0; while(接收條件 == 1){ x=StrToFloat(x_input->Text); s.printf("%2.2f",x); printf("%2.2f",x); info1->Lines->Add(s); } } void __fastcall TForm1::input_okClick(TObject *Sender) { if(x_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ 傳送參數 } } [/code] |
js80875
一般會員 發表:2 回覆:2 積分:0 註冊:2008-12-17 發送簡訊給我 |
感謝ikk和carstyc的回覆,我自己敲了一個procedure放主程式下去測試,
出現了兩個錯誤,Call to undefined function 'myprocedure'' 上面說未定義,我先前的TForm都是從button或者memo或者event的屬性來的, 是要從Form面板上或者event屬性來定義嗎, 因為我procedure打算要放主程式,不知道要選哪個event來放比較合適, 另一個錯誤'_fastcall TForm1::myprocedure(int)' is not a member of 'TForm1' 不屬於TForm1的成員,我網路上找的定義方式大至上都是類似這宣告方式, 不知道是什麼細節出錯, void __fastcall TForm1::FormCreate(TObject *Sender) { myprocedure(1); } void __fastcall TForm1::myprocedure(int input_x) { AnsiString infoprt1; infoprt1.printf("%d",input_x); info2->Lines->Add(infoprt1); } void __fastcall TForm1::input_okClick(TObject *Sender) { int input_x; int touch1=1; if(x_coord_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ input_x=StrToFloat(x_coord_input->Text); myprocedure(1); } } ===================引 用 carstyc 文 章=================== 如ikk大大所講的, FormCreate 只會執行一次。 你要做的應該是把 FormCreate 要做的事,寫成另一個 procedure ,然後在 FormCreate 時去呼叫它 [code cpp] void __fastcall TForm1::FormCreate(TObject *Sender) { myprocedure(1); } void __fastcall TForm1::input_okClick(TObject *Sender) { if(x_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ myprocedure(1); } } void __fastcall TForm1::myprocedure(int nIn) { AnsiString s; float x; 接收條件 =0; while(接收條件 == 1){ x=StrToFloat(x_input->Text); s.printf("%2.2f",x); printf("%2.2f",x); info1->Lines->Add(s); } } [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
真的, taishyang 大大說的沒錯。
論譠中只能跟你講程式處理的模式,但基本的BCB 語法還是要靠你自己去完成。 你說的問題是因為你在程式段寫了一個 procedure ,但未在 .h 的檔案中去宣告它屬於這個 Form 的 method 。 你把你程式的 .h (如 Unit1.h ) 打開看一下,應該就能明白了。 ===================引 用 js80875 文 章=================== 感謝ikk和carstyc的回覆,我自己敲了一個procedure放主程式下去測試, 出現了兩個錯誤,Call to undefined function 'myprocedure'' 上面說未定義,我先前的TForm都是從button或者memo或者event的屬性來的, 是要從Form面板上或者event屬性來定義嗎, 因為我procedure打算要放主程式,不知道要選哪個event來放比較合適, 另一個錯誤'_fastcall TForm1::myprocedure(int)' is not a member of 'TForm1' 不屬於TForm1的成員,我網路上找的定義方式大至上都是類似這宣告方式, 不知道是什麼細節出錯, void __fastcall TForm1::FormCreate(TObject *Sender) { myprocedure(1); } void __fastcall TForm1::myprocedure(int input_x) { AnsiString infoprt1; infoprt1.printf("%d",input_x); info2->Lines->Add(infoprt1); } void __fastcall TForm1::input_okClick(TObject *Sender) { int input_x; int touch1=1; if(x_coord_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ input_x=StrToFloat(x_coord_input->Text); myprocedure(1); } } ===================引 用 carstyc 文 章=================== 如ikk大大所講的, FormCreate 只會執行一次。 你要做的應該是把 FormCreate 要做的事,寫成另一個 procedure ,然後在 FormCreate 時去呼叫它 [code cpp] void __fastcall TForm1::FormCreate(TObject *Sender) { myprocedure(1); } void __fastcall TForm1::input_okClick(TObject *Sender) { if(x_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ myprocedure(1); } } void __fastcall TForm1::myprocedure(int nIn) { AnsiString s; float x; 接收條件 =0; while(接收條件 == 1){ x=StrToFloat(x_input->Text); s.printf("%2.2f",x); printf("%2.2f",x); info1->Lines->Add(s); } } [/code] |
js80875
一般會員 發表:2 回覆:2 積分:0 註冊:2008-12-17 發送簡訊給我 |
感謝taishyang大大的指點,我是去圖書館借旗標的c++ builder 6來參考,
大部分是去網路上爬文,之後會買本比較詳細的書來看, 也感謝carstyc大大提示我method, carstyc大大我還有個問題想問, scanf指令在dos視窗會等待使用者輸入字元, 在bcb上我把主程式放進新增的procedure內, 想要寫和scanf一樣有等待輸入字元鍵入enter效果的迴圈, 裡頭有好幾個類似input=StrToFloat(x_input->Text);的edit接收參數, 分別用while條件迴圈去做和scanf一樣暫停的動作, 來和一樣在暫停時能在edit上鍵入字元, 可是測試的時候會因為迴圈的關係讓form面板和物件顯示不出來, 無法鍵入數字,不知道有沒有其他的方式來讓面板顯示出來再停住, 我有上傳檔案,/* */框住的部份是讓面板顯示不出來的while迴圈, http://ultrashare.net/hosting/fl/9f127af2d9/3test void __fastcall TForm1::myprocedure(int input_x,int touch1) { info2->Lines->Add("請輸入X"); do{ Sleep(10); }while(touch1!=1); AnsiString infoprt1; infoprt1.printf("%d",input_x); info2->Lines->Add(infoprt1); info2->Lines->Add("以上"); } void __fastcall TForm1::input2Click(TObject *Sender) { Image_car->Hide(); info2->Clear(); } //--------------------------------------------------------------------------- void __fastcall TForm1::input_okClick(TObject *Sender) { int input_x; //int touch1=1; if(x_coord_input->Text ==""){ ShowMessage("未輸入數字,請重新輸入"); }else{ input_x=StrToFloat(x_coord_input->Text); myprocedure(input_x,1); } } ===================引 用 carstyc 文 章===================[code cpp] 真的, taishyang 大大說的沒錯。 論譠中只能跟你講程式處理的模式,但基本的BCB 語法還是要靠你自己去完成。 你說的問題是因為你在程式段寫了一個 procedure ,但未在 .h 的檔案中去宣告它屬於這個 Form 的 method 。 你把你程式的 .h (如 Unit1.h ) 打開看一下,應該就能明白了。 [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
你說的做法是以前在 Dos 時代,也就是你所謂的 Console 模式,才會有用while 迴圈等待輸入的狀態。
現在的開發工具,都是以事件趨動了。 也就是你在Form 上面 拉一個 Text ,再拉一個 Button 。程式就能執行了。 完全已經不用 while 迴圈來做事,當有人按 Button 時,就會去啟動 on Click 的事件。 你可以在 Button 的 on Click 事件,去寫你要做的事,這個時候也可以讀取使用者在 Text 中輸入的資料。 你在這樣的模式下,執行一個無窮while 迴圈,當然會把所有的resource 吃光,使的所有的Form 上面的元件都沒空去做其它事。 包含Refresh,所以看起來才像是Form上面的元件沒有回應。 建議你先不要再繼續Try code了. 先把借來的那本書,仔細的看看前面幾個章節。尤其看看沒有介紹 BCB 開發工具的章節。 等把基本的搞熟一點後,再來試看看繼續...這樣會比較有成就感哦... ===================引 用 js80875 文 章=================== 感謝taishyang大大的指點,我是去圖書館借旗標的c builder 6來參考, 大部分是去網路上爬文,之後會買本比較詳細的書來看, 也感謝carstyc大大提示我method, carstyc大大我還有個問題想問, scanf指令在dos視窗會等待使用者輸入字元, 在bcb上我把主程式放進新增的procedure內, 想要寫和scanf一樣有等待輸入字元鍵入enter效果的迴圈, 裡頭有好幾個類似input=StrToFloat(x_input->Text);的edit接收參數, 分別用while條件迴圈去做和scanf一樣暫停的動作, 來和一樣在暫停時能在edit上鍵入字元, 可是測試的時候會因為迴圈的關係讓form面板和物件顯示不出來, 無法鍵入數字,不知道有沒有其他的方式來讓面板顯示出來再停住, 我有上傳檔案,/* */框住的部份是讓面板顯示不出來的while迴圈, http://ultrashare.net/hosting/fl/9f127af2d9/3test |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |