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

判斷StringGrid輸入是否為數字

答題得分者是:aftcast
Brady_Chen
一般會員


發表:6
回覆:14
積分:9
註冊:2013-02-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-02-22 09:48:11 IP:122.147.xxx.xxx 訂閱
 各位前輩好

小弟又來請教各位了

這次的問題是:

我建立了一個StringGrid 其中有兩個Cols是由使用者自行輸入數字

數字的型態可能是正負數 也可能是小數點

我想要建立一個防呆機制

如果輸入成文字 會跳出提示 並將該格歸零

有想過用 isdigit 去檢查

但是似乎只能檢查是否為整數型態

小數點跟正負號會被判定為錯誤

想請教各位前輩是否有適合的語法

若能撥空指導 感激不盡

謝謝 !!!
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-02-22 11:05:26 IP:114.32.xxx.xxx 訂閱
 HELLO,

String testStr = "-1.3";
try
{
float f = StrToFloat(testStr);
}
catch (EConvertError &E)
{
//ShowMessage(AnsiString(E.ClassName()) "\n" AnsiString(E.Message));
ShowMessage("不能轉,當然這裡也可以就把字串清了");
}
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Brady_Chen
一般會員


發表:6
回覆:14
積分:9
註冊:2013-02-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-02-22 14:27:28 IP:122.147.xxx.xxx 訂閱
 感謝蕭前輩的指教

那個方法我有找到 也試過了

但是每只要執行到 try 的內容無法執行時

他不會自動跳到 catch 去

而是被BCB的偵錯攔截機制抓走了

雖然我可以把我的BCB攔截機制關掉
(我沒試過 但有看到此方法)

但是當我把程式給別人執行時

會不會又變成無法執行呢???

還有...這樣之後如果要新增或維護程式功能

BCB本身是不是就失去偵錯的能力了呢??

感謝您的回答

謝謝!!!
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-02-22 15:14:27 IP:114.32.xxx.xxx 訂閱
請放心服用!

僅在bcb除錯時才會被攔截,但單純對你編好的exe檔按二下去執行時,一切都是正常的。

在除錯時,若跳入裡面,請在按一下 run,就會出來。並沒有失去偵錯能力,而且即使不小心在測的過程跳入,也可以從停止點知道是因為這個原因而進去的。

一時間也想不到更方便的方式。不然就是使用
if ( ??? == strToFloatDef(s, ???) ) { 表示輸了不該輸入的,但缺點是 ??? 這個值就不能被用到}



===================引 用 Brady_Chen 文 章===================
感謝蕭前輩的指教

那個方法我有找到 也試過了

但是每只要執行到 try 的內容無法執行時

他不會自動跳到 catch 去

而是被BCB的偵錯攔截機制抓走了

雖然我可以把我的BCB攔截機制關掉
(我沒試過 但有看到此方法)

但是當我把程式給別人執行時

會不會又變成無法執行呢???

還有...這樣之後如果要新增或維護程式功能

BCB本身是不是就失去偵錯的能力了呢??

感謝您的回答

謝謝!!!
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2013-02-22 15:30:30 IP:114.32.xxx.xxx 訂閱
剛回憶起另一個…

TryStrToFloat

使用這個吧!

------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Brady_Chen
一般會員


發表:6
回覆:14
積分:9
註冊:2013-02-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2013-02-22 16:24:43 IP:122.147.xxx.xxx 訂閱
 感謝蕭前輩!!!

我已經成功的利用TryStrToFloat 寫出來了

程式如下:

[code cpp]
float f;
if(TryStrToFloat(StringGrid1->Cells[3][j 1],f)==false)
{ShowMessage("Please enter a number");}
[/code]

感謝!!!
系統時間:2017-10-22 5:27:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!