ITPub博客

首页 > Linux操作系统 > Linux操作系统 > winform键盘事件KeyPress

winform键盘事件KeyPress

原创 Linux操作系统 作者:fangqm 时间:2011-06-19 12:28:37 0 删除 编辑
如果让窗体接受键盘事件,即如何启动Form1_KeyPress事件
Form.KeyPreview属性,如果窗体将接收所有键事件,则为   true;如果窗体上当前获取焦点的控件接收键事件,则为   false,默认值的值是false。你可以将其设为true。
 
Windows窗体通过引发键盘事件来处理键盘输入以响应Windows消息,大多数Windows窗体应用程序都通过处理键盘事件来以独占方式处理键盘输入。
1.按键的类型
  Windows窗体将键盘输入标识为由按位Keys枚举表示的虚拟键代码。使用Keys枚举,可以综合一系列按键以生成单个值,这些值与 WM_KEYDOWN和WM_SYSKEYDOWNWindows消息所伴随的值相对应。另外,程序开发人员可通过处理KeyDown或KeyUp 事件来检测大多数物理按键操作。字符键是Keys枚举的子集,它们与WM_CHAR和WM_SYSCHAR Windows消息所伴随的值相对应,如果通过组合按键得到一个字符,则可以通过处理KeyPress事件来检测该字符。
2.键盘事件的顺序
  一个控件上可能出现3个与键盘相关的事件,下面是这些事件发生的常规顺序:
用户按“a”键,该键将被预处理和调度,而且会发生KeyDown事件。
用户按住“a”键,该键将被预处理和调度,而且会发生KeyPress事件。
用户松开“a”键,该键将被预处理和调度,而且会发生KeyUp事件。
3.键的预处理
  像其他消息一样,键盘消息是在窗体或控件的WndProc方法中处理的。窗体或控件在处理键盘消息之前,PreProcessMessage方法会调用一个或多个方法,这些方法可被重写以处理特殊的字符键和物理按键。
  其实我们按下一个键时,KeyDown 和KeyPress 是都要发生的,而且两个人看上去没有什么区别。但是其实两者还是有实质的区别的。
  例如在一个多行文本框里面输入字符,为什么我们没有定义一个键盘响应事件,但是键盘却响应了,把字符输入到了文本框呢?其实我觉得因为这个事件就是系统默认的一个消息响应,它就是KeyPress 。如果你自己还给KeyPress 定义了自己的响应的话,那么程序会先执行你定义的程序,然后完成系统要求的显示字符事件的响应过程,但是如果你在自己定义KeyPress 事件如:
  private void _TextBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    e.Handled=true ;
  那么系统要求的显示字符响应过程就不会被执行,原因就是这个语句的意思就是这个消息响应已经完成。但是如果你在KeyDown ,KeyUp 里面加这条语句,显示字符串等消息还是会发生,这说明系统的显示字符串和KeyDown ,KeyUp 是没有关系的,而对于回车和退格消息响应则是由KeyDown 控制,增加那条语句则回车换行不会执行,退格响应也不会执行。
  综上:要屏蔽键盘上的一个字符的输入,可以在KeyPress 里面进行增加语句,而要屏蔽回车和退格则可以在KeyDown 里面进行增加语句。
/*********************/
键事件按下列顺序发生:
KeyDown
KeyPress
KeyUp
KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发KeyUp事件。
定义
KeyDown:在控件有焦点的情况下按下键时发生。
KeyPress:在控件有焦点的情况下按下键时发生。(下面会说和KeyDown 的区别)
KeyUp:在控件有焦点的情况下释放 键时发生。
KeyPress 和KeyDown 、KeyPress之间的区别
KeyPress主要用来捕获数字(注意:包括Shift+数字的符号 )、字母(注意:包括大小写 )、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符
KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键)
KeyPress 只能捕获单个字符
KeyDown 和KeyUp 可以捕获组合键。
KeyPress 可以捕获单个字符的大小写
KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写。
KeyPress 不区分小键盘和主键盘的数字字符。
KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。
其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23109131/viewspace-700197/,如需转载,请注明出处,否则将追究法律责任。

上一篇: winform-DataGridview
请登录后发表评论 登录
全部评论

注册时间:2010-03-24

  • 博文量
    298
  • 访问量
    729593