Posted on 2007-03-10 23:45
ouyida3 阅读(1305)
评论(0) 编辑 收藏 所属分类:
Delphi
今天想在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竟然行了,于是上网查了一下三者的区别,
xiaobian的blog里这么说:
{KeyPress主要用来接收字母、数字等ANSI字符,而 KeyDown 和 KeyUP 事件过程可以处理任何不被 KeyPress 识别的击键,诸如:功能键(F1-F12)、编辑键、定位键以及任何这些键和键盘换档键的组合等。与 KeyDown 和 KeyUp 事件不同的是,KeyPress 不显示键盘的物理状态(SHIFT键),而只是传递一个字符。KeyPress 将每个字符的大、小写形式作为不同的键代码解释,即作为两种不同的字符。而 KeyDown 和 KeyUp 用两种参数解释每个字符的大写形式和小写形式:keycode — 显示物理的键(将 A 和 a 作为同一个键返回)和 shift —指示 shift + key 键的状态而且返回 A 或 a 其中之一。
KeyDown、KeyUp事件是当按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生的。由于一般按下键盘的键往往会立即放开(这和鼠标不同),所以这两个事件使用哪个差别不大。}
而且,up和其他两者还有一个区别:要判断key修改后的状态必须用up。