欄位是 ALPHA 輸入值是 Integer 要判斷出現錯誤 |
答題得分者是:pprayer
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
[code delphi] procedure TPilgrim_PalaceFm1.DB_PLBr_YKeyPress(Sender: TObject; var Key: Char); begin if (DB_PLBr_Y.Text ='0') or (DB_PLBr_Y.Text ='') Then application.MessageBox('生年不可以為 0 或 空白!', '警告', MB_OK MB_ICONWARNING); DB_PLBr_Y.Text:=''; end; [/code] 小弟請教各位老師前輩,如上述的判斷語法,會出現在欄位若空白或為0時沒動作,反而是輸入正常值時才會秀出錯誤訊息,而且也不會停留在原輸入欄位,會自動跳下一個欄位,小弟請教各位前輩,如何修改判斷模式,謝謝!※還請教在 Events 的選項用 OnKeyPress 對嗎? |
lubkiller
一般會員 發表:0 回覆:1 積分:0 註冊:2016-02-02 發送簡訊給我 |
procedure TPilgrim_PalaceFm1.DB_PLBr_YKeyPress(Sender: TObject;
var Key: Char); begin if not (key in ['0'..'9',#8]) then key := #0; end; 這樣就只能輸入0~9跟backspace,以此類推 會發生你所說的問題是因為 這個事件是在處理鍵盤鍵入"當下"要做的動作 而你程式的邏輯卻是鍵入"之後"要做的動作 想當然而是錯的 還沒鍵入完成怎麼會有值呢? 當然會進入你所寫的判別式 而且照理說你所寫的應該都會秀出錯誤訊息 而不應該是沒動作?! ===================引 用 K1086 文 章=================== [code delphi] procedure TPilgrim_PalaceFm1.DB_PLBr_YKeyPress(Sender: TObject; var Key: Char); begin if (DB_PLBr_Y.Text ='0') or (DB_PLBr_Y.Text ='') Then application.MessageBox('生年不可以為 0 或 空白!', '警告', MB_OK MB_ICONWARNING); DB_PLBr_Y.Text:=''; end; [/code] 小弟請教各位老師前輩,如上述的判斷語法,會出現在欄位若空白或為0時沒動作,反而是輸入正常值時才會秀出錯誤訊息,而且也不會停留在原輸入欄位,會自動跳下一個欄位,小弟請教各位前輩,如何修改判斷模式,謝謝!※還請教在 Events 的選項用 OnKeyPress 對嗎? |
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 lubkiller 文 章=================== procedure TPilgrim_PalaceFm1.DB_PLBr_YKeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9',#8]) then key := #0; end; 這樣就只能輸入0~9跟backspace,以此類推 會發生你所說的問題是因為 這個事件是在處理鍵盤鍵入"當下"要做的動作 而你程式的邏輯卻是鍵入"之後"要做的動作 想當然而是錯的 還沒鍵入完成怎麼會有值呢? 當然會進入你所寫的判別式 而且照理說你所寫的應該都會秀出錯誤訊息 而不應該是沒動作?! ===================引 用 K1086 文 章=================== [code delphi] procedure TPilgrim_PalaceFm1.DB_PLBr_YKeyPress(Sender: TObject; var Key: Char); begin if (DB_PLBr_Y.Text ='0') or (DB_PLBr_Y.Text ='') Then application.MessageBox('生年不可以為 0 或 空白!', '警告', MB_OK MB_ICONWARNING); DB_PLBr_Y.Text:=''; end; [/code] 小弟請教各位老師前輩,如上述的判斷語法,會出現在欄位若空白或為0時沒動作,反而是輸入正常值時才會秀出錯誤訊息,而且也不會停留在原輸入欄位,會自動跳下一個欄位,小弟請教各位前輩,如何修改判斷模式,謝謝!※還請教在 Events 的選項用 OnKeyPress 對嗎? [code delphi] procedure TPilgrim_PalaceFm1.DB_PLBr_YKeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9',#8]) then key := #0; application.MessageBox('生年不可以為 0!', '警告', MB_OK MB_ICONWARNING); end; [/code] 感謝 lubkiller 教導,小弟改成上述判斷,但是還可以輸入0跳過,不會強制一定要有 > 0 才可以往下個欄位輸入,請問這段程式中要加什麼語法才能達到目的,謝謝! |
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
試試看...
[code delphi] procedure TPilgrim_PalaceFm1.DB_PLBr_YKeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9',#8]) then begin key := #0; application.MessageBox('生年不可以為 0!', '警告', MB_OK MB_ICONWARNING); TWinControl(Sender).SetFocus; end; end; [/code] |
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |