KeyDown,KeyPress 和KeyUp 之我谈(更新版本)

简介: 转自:http://www.cnblogs.com/stan0714/archive/2008/10/12/1309573.html最近在做一个程序,需要实现窗口下的F5 刷新功能。研究了一下KeyDown,KeyPress 和KeyUp ,发现之间还是有点学问的。

转自:http://www.cnblogs.com/stan0714/archive/2008/10/12/1309573.html


最近在做一个程序,需要实现窗口下的F5 刷新功能。

研究了一下KeyDown,KeyPress 和KeyUp ,发现之间还是有点学问的。

让我们带着如下问题来说明,如果你看到这些问题你都知道,那么这篇文章你就当复习吧:)

1.这三个事件的顺序是怎么样的?

2.KeyDown 触发后,KeyUp是不是一定触发?

3.三个事件的定义

4.KeyDown、KeyUp 和KeyPress 之间的区别

5.如何区分是否按的是小键盘?

6.PrScrn按键三个事件能够捕获吗?

7.{菜单键}和{开始键}KeyPress能够捕获吗?

8.如何捕获系统的组合键?

9.通过什么方式捕获PrScrn按键事件?

(一)键事件按下列顺序发生:

KeyDown

KeyPress

KeyUp

(二)KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发KeyUp事件。

(三)定义

KeyDown:在控件有焦点的情况下按下键时发生。

KeyPress:在控件有焦点的情况下按下键时发生。(下面会说和KeyDown 的区别)

KeyUp:在控件有焦点的情况下释放键时发生。

(四)KeyPress 和KeyDown 、KeyPress之间的区别

1.KeyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符
KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键)

2.KeyPress 只能捕获单个字符

KeyDown 和KeyUp 可以捕获组合键。

3.KeyPress 可以捕获单个字符的大小写

4.KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写。

5.KeyPress 不区分小键盘和主键盘的数字字符。

KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。

6.其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

(五)系统组合键的判定

在使用键盘的时候,通常会使用到CTRL+SHIFT+ALT 类似的组合键功能。对于此,我们如何来判定?

通过KeyUp 事件能够来处理(这里说明一下为什么不用KeyDown,因为在判定KeyDown的时候,CTRL、SHIFT和ALT 属于一直按下状态,然后再加另外一个键是不能准确捕获组合键,所以使用KeyDown 是不能准确判断出的,要通过KeyUp 事件来判定 )

这里简单的列举出CTRL+其它键的组合判定代码:


private void Form3_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control)
{
MessageBox.Show("KeyUp:Ctrl+" + e.KeyValue.ToString());
}
}

(六)捕获PrScrn按键事件

通过一种钩子的方式可以判定PrScrn 按键事件,钩子可以获取任何键盘事件。

这里给出CodeProject 上面的开源代码的解决方案。大家有兴趣自己研究吧:)。

目录
相关文章
|
6月前
基于Vue2用keydown、setTimeout事件实现连续按键(连击)任意键(或组合键)3秒触发自定义事件(以F1键为例)
基于Vue2用keydown、setTimeout事件实现连续按键(连击)任意键(或组合键)3秒触发自定义事件(以F1键为例)
|
6月前
基于Vue2用keydown、keyup事件实现长按键盘任意键(或组合键)3秒触发自定义事件(以F1键为例)
基于Vue2用keydown、keyup事件实现长按键盘任意键(或组合键)3秒触发自定义事件(以F1键为例)
|
4月前
|
JavaScript 前端开发 Java
获取键盘事件的keyCode属性
获取键盘事件的keyCode属性
|
6月前
|
JavaScript
原生js实现【longPressKey】长按键盘任意键(或组合键)3秒触发自定义事件(以Pause/Break键为例)
原生js实现【longPressKey】长按键盘任意键(或组合键)3秒触发自定义事件(以Pause/Break键为例)
|
JavaScript
click与addEventListener和removeEventListener事件详解
click与addEventListener和removeEventListener事件详解
click与addEventListener和removeEventListener事件详解
|
JavaScript 前端开发
【面试官系列】input、change,keydown、keypress、keyup触发的时机是?
我认为这道题是一个挺有意思的题,但是回答正确的面试者很少,今天我来聊一聊。先上 DJ,哦不对先上 DEMO,测试地址:https://www.lilnong.top/static/html/textarea-event-test.html
490 0
【面试官系列】input、change,keydown、keypress、keyup触发的时机是?
|
Windows
50、键盘事件
键盘事件由用户击打键盘触发,主要有keydown、keypress、keyup三个事件,它们都继承了KeyboardEvent接口。
236 0
window常用的快捷键
1、win+r打开运行命令   2、appwiz.cpl打开程序面板,进行程序的安装、卸载 输入win+r打开运行命令,输入appwiz.cpl   3、services.msc打开服务,一般用于启动或者关闭软件的服务 输入win+r打开运行命令,输入services.msc
776 0