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

欄位是 ALPHA 輸入值是 Integer 要判斷出現錯誤

答題得分者是:pprayer
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-01-23 19:00:17 IP:1.168.xxx.xxx 訂閱

[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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-02-02 16:00:09 IP:36.235.xxx.xxx 訂閱
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
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2016-02-02 18:21:12 IP:125.230.xxx.xxx 訂閱

===================引 用 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 的選項用 #0;
application.MessageBox('生年不可以為 0!', '警告', MB_OK MB_ICONWARNING);
end;

[/code]

感謝 lubkiller 教導,小弟改成上述判斷,但是還可以輸入0跳過,不會強制一定要有 > 0 才可以往下個欄位輸入,請問這段程式中要加什麼語法才能達到目的,謝謝!
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2016-06-14 16:56:00 IP:124.109.xxx.xxx 訂閱
試試看...

[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
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2016-06-15 15:45:27 IP:1.165.xxx.xxx 訂閱
謝謝 pprayer 前輩教導!小弟測試可以了!感恩!
系統時間:2017-10-19 3:59:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!