WinForm中KeyDown,KeyPress和KeyUp的顺序与区别解析 PreviewKeyDown

PreviewKeyDown:在焦点位于此控件上的情况下,当有按键动作时发生(在 KeyDown 事件之前发生)。
小注:
某些按键,比如 Tab、Return、Esc 和箭头键,通常会被某些控件忽略,因为它们没有被视为输入按键。 例如,默认情况下,Button 控件忽略箭头键。 通常按箭头键会使焦点移动到上一个或下一个控件。 箭头键被视为导航键,按这些键通常不会引发 Button 的 KeyDown 事件。 但是,按 Button 的箭头键的确将引发 PreviewKeyDown 事件。 通过为 Button 处理 PreviewKeyDown 事件和把 IsInputKey 属性设置为 true,可以在按箭头键时提出 KeyDown 事件。 但是,如果处理箭头键,则焦点将不再移动到上一个或下一个控件。
KeyDown:在控件有焦点的情况下按下键时发生。
小注:
若要仅在窗体级别处理键盘事件而不允许其他控件接收键盘事件,请将窗体的 KeyPress 事件处理方法中的 KeyPressEventArgs.Handled 属性设置为 true。 某些键,如 Tab、Return、Esc 和箭头键,由控件自动处理。 为使这些键引发 KeyDown 事件,必须在窗体上的每个控件中重写 IsInputKey 方法。 用于重写 IsInputKey 的代码需要确定是否按下了某个特殊键,并且需要返回一个 true 值。 不用重写 IsInputKey 方法,您可以处理 PreviewKeyDown 事件并将 IsInputKey 属性设置为 true。 有关代码示例,请参见 PreviewKeyDown 事件。

转载于:https://www.cnblogs.com/sunnyxp/p/7852705.html

相关资源:WinForm中KeyDown,KeyPress和KeyUp的顺序与区别解析-其它代码类…

主要介绍了WinForm中KeyDown,KeyPress和KeyUp的顺序与区别解析,对C#初学者来说很有学习借鉴价值,需要
的朋友可以参考下
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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值