今天想在strg的3、4行都輸入了以后自動算出第5行的值,于是在keypress事件這么寫:
//計算實洋
? if (strg1.Cells[3,strg1.Row]<>'') and (strg1.Cells[4,strg1.Row]<>'') then
? strg1.Cells[5,strg1.Row]:=floattostr(strtofloat(strg1.Cells[3,strg1.Row])
????? * strtofloat(strg1.Cells[4,strg1.Row]));
誰知道運行時我輸入了第3行和第4行后報第4行的值為空,換成keyup竟然行了,于是上網(wǎng)查了一下三者的區(qū)別,
xiaobian的blog里這么說:
{KeyPress主要用來接收字母、數(shù)字等ANSI字符,而 KeyDown 和 KeyUP 事件過程可以處理任何不被 KeyPress 識別的擊鍵,諸如:功能鍵(F1-F12)、編輯鍵、定位鍵以及任何這些鍵和鍵盤換檔鍵的組合等。與 KeyDown 和 KeyUp 事件不同的是,KeyPress 不顯示鍵盤的物理狀態(tài)(SHIFT鍵),而只是傳遞一個字符。KeyPress 將每個字符的大、小寫形式作為不同的鍵代碼解釋,即作為兩種不同的字符。而 KeyDown 和 KeyUp 用兩種參數(shù)解釋每個字符的大寫形式和小寫形式:keycode — 顯示物理的鍵(將 A 和 a 作為同一個鍵返回)和 shift —指示 shift + key 鍵的狀態(tài)而且返回 A 或 a 其中之一。
????KeyDown、KeyUp事件是當按下 ( KeyDown ) 或松開 ( KeyUp ) 一個鍵時發(fā)生的。由于一般按下鍵盤的鍵往往會立即放開(這和鼠標不同),所以這兩個事件使用哪個差別不大。}
而且,up和其他兩者還有一個區(qū)別:要判斷key修改后的狀態(tài)必須用up。