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