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

程式流程求教,離開dbgriid之殘留keypress處理.

缺席
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-23 15:15:38 IP:61.56.xxx.xxx 未訂閱
各位先進好,又來麻煩大家了. 流程理想: 由使用者在grid 最後一行第一欄打入空白後按Enter 鍵,或在第一欄(空值) 直接按Enter鍵後,由程式判斷,將一 Tedit setfocus (用於輸入如總訂單價, 或其它資料), 如果使用者在 Tedit 上直接按 Enter, 即表示輸入完畢, 作一個 btnSure.click 之動作. 結果: 如在第一欄打入空白後按Enter 鍵,流程很正確,可讓 deEdit1 得到 focus 但如果第一欄(本為空值)直接按Enter鍵後, 會讓 FormKeyPress 處理 Enter, 造成 btnSure.Click 提早執行, 無法讓 deEdit1 得到 focus (原因是 grid enter -> deEdit1 setfocus( ACtiveControl 已是Tedit) --> FormKeypress 處理 enter ,所以會 btnSure.click) 請教各位前輩, 如何bypass grid1 殘留之 enter 鍵. 不讓其影響後序動作? (其實我也不太了解, 是 formkeypress(Enter)先作,還是deEdit1 確實有先focus了,再處理 grid 留下的 enter 鍵,但皆會造成 btnSure.click 執行) 程式碼如下: procedure Tform1.FormKeyPress(Sender: TObject; var Key: Char); begin inherited; if (key= #13) then begin if (ACtiveControl is Tedit) // deEdit1 按 enter 鍵 then begin // 但從 grid 出來,activecontrol 已 // 是 Tedit if ( MessageDlg('是否確定要新增?',mtConfirmation,mbYes,mbNo],0,)=mrYes) then begin btnSure.click; // <----- 確定處理 key:=#0; end else key:=#0; end; end; end; procedure Tform1.DBGrid1ColExit(Sender: TObject); begin if (DBGRID1.SelectedField=TblFirstField) and (Tbl.state in EditModes then begin if (length(TblFirstField.asstring)=0 ) or (TblFirstField.value=' ') then begin // grid 輸入完畢控制處 deEdit1.setfocus; // <---- 到 deEdit1 輸入最後資料 end; end; end;
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-23 15:33:09 IP:61.219.xxx.xxx 未訂閱
將btnSure的property -->Default改為False
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-23 15:40:18 IP:61.221.xxx.xxx 未訂閱
a123473119老大哥你好: 其實edit就有onkeypress的觸發事件你只要在deEdit1 的onkeypress 寫上 如果使用者在 Tedit 上直接按 Enter, 即表示輸入完畢, 作一個 btnSure.click 之動作.
------
======================
昏睡~
不昏睡~
不由昏睡~
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-23 18:21:35 IP:61.56.xxx.xxx 未訂閱
感謝二位前輩,其實以前我作頭檔身檔時,習慣在dbgrid結束後,再讓使用者鍵入 如總價,稅額等..,以前也是在dbgrid結束前,下一個 deTeditx.sefocus, 當時就 奇怪會自動 focus 到下一個 Tedit control,由於不會解,就只能 focus 到 目 標 deTeditx 的上一個,後讓其自動跳下(Tedit tab=enter).   今天才知道是 dbgrid殘留之enter key,剛好有人問到 keybuffer 之問題 試這在 deTeditx.setfocus 前, 下一 EmptykeyQueue ,就解決了.  真感謝大家.     能再請問: 1.能在 form 之 onActivate 內,close 此form 嗎,                 還是一定要把某些判斷寫在form show之前                2. raise Exception.create('....') 中之確定鈕                 用滑數點,跟按Enter有何不同                 我在 dbgrid 之OnColExit 內判斷鍵入資料是否正確                 若不正確就raise Exception.create('....')                  若用滑數點確定鈕,就可回到原錯誤欄內                 但若直接,來關閉此視窗,程式會一直反覆做ColExit 即Exception視窗按一次,就又出現一次,無法關閉 一定要用滑鼠去點確定鈕才行,怎這樣, 用滑數點,跟按Enter確定,不是同意思嗎? 不好意思,生手總是問題多.
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-23 19:15:57 IP:61.56.xxx.xxx 未訂閱
分享一下: 我已找到在 Form.Onactivate close 之方法(外國人說的) 在此form 加一Timer, 如要close ,可將此timer打開 ontimer: close interval : 小的好
系統時間:2024-04-29 11:41:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!