WinForm中窗体控件的键盘事件KeyPress不响应

WinForm中窗体控件的键盘事件KeyPress不响应

今天在做一个C#的WinForm窗体的时候,需要在窗体的某个控件上响应用户的键盘事件。

我在控件的事件属性页里面很简单的找到了KeyDown,KeyPress,KeyUp这几个鼠标事件,查看了一下说明:

KeyDown:在首次按下某个键时发生

KeyPress:在空间具有焦点且用户按下并释放某个键后发生

KeyUp:在释放键时发生

好吧,很明显KeyPress最符合要求么,可是,按了键盘上的Delete键老半天发现KeyPress竟然没有响应,断点一直进不去。试了一下控件其他两个事件KeyDown和KeyUp,是正常的。于是在网上找了找,找到一个答案,说是在需要控件响应KeyPress事件的时候,父窗体KeyPreview必须设置为True。

尝试该方法后无效。

试了一下键盘上的其他按键,好像KeyPress事件就只是相应普通的字母键,数字键,空格还有Backspace,其他的好像都不行。最后在网上找到了这样的解释:

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 都不能捕获。

 

posted @ 2020-02-29 03:23  snsnet  阅读(1580)  评论(0编辑  收藏  举报