OnChange 時還原數值及阻止跳 Record |
尚未結案
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
我想在 TField.OnChange Event 中檢查用戶輸入的數值合法與否, 若不合法則把值還原, 其中遇到了一些問題。 首先, 我本來很直覺地覺得使用 TField.OnValidate 去做檢查, Validate 嘛, 字面解釋就是做這項工作的, 可是發覺 Event 當中的 OldValue 不能取得原本的舊值, 但在 OnChange Event 中卻可以, 於是改用了 OnChange Event, 測試程式碼如下:
procedure TForm1.ClientDataSet1mytextChange(Sender: TField); begin if ClientDataSet1MyText.NewValue = '123' then ClientDataSet1MyText.AsString := ClientDataSet1MyText.OldValue; end;上面假設 '123' 是非法字串, 結果運作得很好; 可是, 觸發 TField.OnChange 的, 不光是用戶把 Input Focus 轉到下一個 Field, 也可能是直接跳到另一個 Record, 為了防止這種情況, 程式加一個 Slient Exception: procedure TForm1.ClientDataSet1mytextChange(Sender: TField); begin if ClientDataSet1MyText.NewValue = '123' then begin ClientDataSet1MyText.AsString := ClientDataSet1MyText.OldValue; Abort; end; end;結果是, Assign 舊值的那句失效了, 很奇怪, 會不會是 Delphi (我用 D7) 的 Bug 的, 有甚麼解決辦法呢? 謝謝. -- 小卜子
------
-- 小卜子 |
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
我找到答案了, 回饋一下。
procedure TForm1.ClientDataSet1mytextChange(Sender: TField); begin ClientDataSet1.DisableControls; try if ClientDataSet1MyText.NewValue = '123' then begin ClientDataSet1MyText.AsString := ClientDataSet1MyText.OldValue; Abort; end; finally ClientDataSet1.EnableControls; end; end;若有更好的方法, 歡迎提供。 -- 小卜子
------
-- 小卜子 |
l630521
資深會員 發表:15 回覆:349 積分:372 註冊:2003-02-17 發送簡訊給我 |
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
|
l630521
資深會員 發表:15 回覆:349 積分:372 註冊:2003-02-17 發送簡訊給我 |
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
|
l630521
資深會員 發表:15 回覆:349 積分:372 註冊:2003-02-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |