線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1756
推到 Plurk!
推到 Facebook!

請問各位老手,BCB有沒有攔截錯誤的指令!

尚未結案
brian7003
一般會員


發表:1
回覆:2
積分:0
註冊:2003-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-03 12:37:16 IP:211.74.xxx.xxx 未訂閱
我是個剛學BCB的新手,最近遇到一個狀況 EX: //--------------------------------- StrToInt(Edit1->Text) //--------------------------------- 如果(Edit1->Text)是Null或者非數字系統, 那麼執行到這一行就會發生錯誤, 我想請問有沒有指令可以在錯誤發訊息發生前... 先把它攔下來,再把它改回正常值,像Edit1->Text = "0" 像我之前想到治標的方法: void __fastcall TForm1::Edit11KeyPress(TObject *Sender, char &Key) { if (!((Key > 47)&&(Key < 58)||(Key == 8)||(Key == 13))) Key = 0; } 但只要小數點".."按兩次它還是會錯 所以想請問各位老手,BCB有沒有攔截錯誤的指令! 拜託啦!3q3q 發表人 - brian7003 於 2003/09/03 12:54:27
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-03 13:10:27 IP:203.73.xxx.xxx 未訂閱
引言: 我是個剛學BCB的新手,最近遇到一個狀況 EX: //--------------------------------- StrToInt(Edit1->Text) //--------------------------------- 如果(Edit1->Text)是Null或者非數字系統, 那麼執行到這一行就會發生錯誤, 我想請問有沒有指令可以在錯誤發訊息發生前... 先把它攔下來,再把它改回正常值,像Edit1->Text = "0" 像我之前想到治標的方法: void __fastcall TForm1::Edit11KeyPress(TObject *Sender, char &Key) { if (!((Key > 47)&&(Key < 58)||(Key == 8)||(Key == 13))) Key = 0; } 但只要小數點".."按兩次它還是會錯 所以想請問各位老手,BCB有沒有攔截錯誤的指令! 拜託啦!3q3q
brian7003 你好: 請參考以下的寫法
bool IsStrInt(AnsiString sz)
{
   try
   {
      StrToInt(sz);
   }
   catch(EConvertError &e)
   {
      return false;
   }
   return true;
}
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
Ricky_567
一般會員


發表:34
回覆:38
積分:19
註冊:2006-11-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-03 14:36:44 IP:211.21.xxx.xxx 未訂閱
你好: 試試 try { int i = StrToInt(Edit1->Text); } catch(...) { Edit1->Text = "0"; }
brian7003
一般會員


發表:1
回覆:2
積分:0
註冊:2003-07-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-04 23:57:03 IP:211.74.xxx.xxx 未訂閱
感謝 RaynorPao & Ricky_567 !!!~~~ 原來有這麼好用的指令,今天又上了一課!!!~~~~(書上都沒有) 再次謝過啦!~~~
DyingYoung
一般會員


發表:1
回覆:3
積分:0
註冊:2003-11-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-11 09:19:43 IP:61.59.xxx.xxx 未訂閱
雖然已經是這摸久的主題了~ 最近剛好有用到, 還是把拙見 po 上來給大家指教一番! 若先進有更好的方法記得告知呦~ :)
//------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
  TEdit *e = dynamic_cast  (Sender);      // 建立按鍵比對樣本
  String p = "0123456789\x08";
  String s = e->Text;      // 若 . 不存在, 增加 . 到比對樣本
  if (!s.Pos (".")) p  = ".";
  if (!s.Pos (" ") || s.Pos ("-")) p  = " -";
  // 若  - 不存在, 增加  - 到比對樣本      s = " -";      // 判斷  /- 號是否在第一個字元出現  or
  // 搜尋比對樣本, 找不到就封殺...
  if (!p.Pos (Key) || (s.Pos (Key) && e->SelStart > 0))
    Key = 0;
}
//------------------------------------------------
發表人 - taishyang 於 2003/12/11 13:42:28
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-12 08:53:56 IP:218.163.xxx.xxx 未訂閱
BCB 我不懂, 但是天使曾說, 有一個 StrToIntDef 的 function, 不知是不是你要的.
系統時間:2024-05-18 18:28:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!