Mr.King's的专栏

.net疯狂学习中...... 一切从基础开始.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

对C#中键盘响应事件的理解。

Posted on 2005-04-10 00:46  探索  阅读(2405)  评论(1编辑  收藏  举报
   最近一直对键盘响应事件迷惑着,于是我经过数次实验等出一下结论,不知道有没有道理。
键盘的事件响应有KeyDown,KeyPress,KeyUp,他们分别执行的顺序为KeyDown->KeyPress->KeyUp,其实我们按下一个键时,KeyDownKeyPress是都要发生的,而且两个人看上去没有什么区别。但是其实两者还是有实质的区别的。
例如在一个多行文本框里面输入字符,为什么我们没有定义一个键盘响应事件,但是键盘却响应了,把字符输入到了文本框呢?其实我觉得因为这个事件就是系统默认的一个消息响应,它就是KeyPress。如果你自己还给KeyPress定义了自己的响应的话,那么程序会先执行你定义的程序,然后完成系统要求的显示字符事件的响应过程,但是如果你在自己定义KeyPress事件如:private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)里面增加语句:e.Handled=true;那么系统要求的显示字符响应过程就不会被执行,原因就是这个语句的意思就是这个消息响应已经完成。但是如果你在KeyDown,KeyUp里面加这条语句,显示字符串等消息还是会发生,这说明系统的显示字符串和KeyDown,KeyUp是没有关系的,而对于回车和退格消息响应则是由KeyDown控制,增加那条语句则回车换行不会执行,退格响应也不会执行。
综上:要屏蔽键盘上的一个字符的输入,可以在KeyPress里面进行增加语句,而要屏蔽回车和退格则可以在KeyDown里面进行增加语句。
Google