WinForm中的键盘按键KeyDown,KeyPress和KeyUp事件

WinForm中的键盘按键KeyDown,KeyPress和KeyUp事件WinForm中的键盘按键有KeyDown,KeyPress和KeyUp事件。那么它们的顺序以及区别在哪⾥呢?本⽂就此作出如下分析:
⼀、顺序:
键盘刷根据MSDN所讲,三者的顺序是:KeyDown>KeyPress>KeyUp.
⼆、区别:
KeyDown和KeyPress很接近,都是在按键按下时候先后发⽣。KeyUp是放掉某个键之后发⽣的事件。
三、KeyDown和KeyPress:
KeyDown的事件中属性是KeyEventArgs,其中包含三个重要属性:
1)KeyCode(返回⼀个Keys的枚举,可以检测除ScrollLock和NumLock之外的其它键值)。
2)KeyValue(等同于KeyCode,只不过是int类型)。
3)KeyData(这个MSDN没有说清楚,不太容易理解。就我做实验,其实是⼀个检测Ctrl,Shift或者Alt加其他键的时候(组合键!)可以都被检测出来。相对⽽⾔,1)和2)只能检测⼀个键值,不能检测组
合键)。
这⾥给出检测组合键的例⼦(注意,先按下Shift,Alt或者Ctrl,然后其他键按下去)
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData==(Keys.A|Keys.Shift))
{
MessageBox.Show("按下了Shift+A!");
}
}
通常,KeyUp记录组合键的顺序⼀定和KeyDown相反(⽐如你Shift+A,那么KeyUp中是A+Shift)。不过就检测组合键⽆关其顺序。
其余检测⽅法:
e.Modifiers(只记录Ctrl,Shift和Alt),加e.KeyChar等判断:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Shift && e.KeyCode == Keys.A)
{
MessageBox.Show("按下了Shift+A");
}
}
KeyEventArgs⾃⾝就有Alt,Control和Shift,因此还可以这样简化:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Shift && e.KeyCode == Keys.A)
{
MessageBox.Show("按下了Shift+A");
}
}
3)注意!Alt,Control或者Shift有左右之分。因此检测左右的话⽤第三种⽅法不可能(KeyEventArgs不判断左右,可以使⽤1或者2⽅法,借助Keys枚举即可)。
4)如果是要做类似“快捷键”(譬如多窗⼝窗体,⽗窗⼝中按下某组合键弹出⼦窗⼝,建议把⽗窗⼝的KeyPreview设置True,这样窗⼝⽐其内部所有的⼦控件优先得到事件触发)。
5)ShiftKey和Shift的区别:
Shift:不能单独作为判断使⽤,必须加另外⼀个字母键作为组合键时候使⽤。
Shiftkey:单独按下Shift键(没有其它组合键)时候判断使⽤。(同理:LShiftKey和RShiftKey)。

本文发布于:2024-09-23 19:22:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/365561.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:组合键   检测   时候   顺序   事件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议