【前言】
最近小编在学习c#视频的时候遇到了小小的阻力,对于键盘的keydown,keyup,keypress事件不是很理解,有一点小小的强迫症,让我们对他们进行了一段研究,终于有一个进展,但是仅仅代表自己的个人观点啦!
【内容】
1、键事件按下列顺序发生:
keyDown→keyPress→keyUp
如一个控件可能出现3个与键盘相关的事件,下面是这些事件发生的常规顺序:
(1)用户按“a”键,该键将被预处理和调度,而且会发生keyDown事件
(2)用户按住“a”键,该键将被预处理和调度,而且会发生keyPress事件
(3)用户松开“a”键,该键将被预处理和调度,而且会发生keyUp事件
需要注意的是,keyDown触发后,不一定触发keyUp;当keyDown按下后,拖动鼠标,那么将不会触发KeyUp事件
2、定义
keyDown:在控件有焦点的情况下按下键时发生
keyPress:在控件有焦点的情况下按下键时发生
keyUp:在控件有焦点的情况下释放键
3、keyDown、keyPress、keyPress的区别
(1)keyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等除了F1-12、Shift、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符
keyDown和keyUp通常可以捕获键盘除PrScm所有按键(这里不讨论特殊键)
(2)keyPress只能捕获单个字符,keyDown和keyUp可以捕获组合键
(3)keyPress可以捕获单个字符的大小写
(4)keyDown和keyUp对于单个字符捕获的keyValue都是一个值,不能判断单个字符的大小写
(5)keyPress不能区分主键盘和小键盘的数字字符
(6)其中PrScrn按键KeyPress、KeyDown和KeyUp都不能捕获
4、代码中的Keydown、keyPress、keyup
//发生顺序:KeyDown->KeyPress->KeyUp
//所有的参数的各种信息都在Keys里自带=>自己查看
//KeyCode、KeyData、KeyValue对于字母键只记录大写的值
//没有KeyChar
//必须先将KeyPreview的属性设置为true
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.Control && e.KeyCode == Keys.F2)
{
MessageBox.Show("You press the Alt and Ctrl and F2 buttons!");
}
if (e.KeyData == Keys.Up)
{
MessageBox.Show("You press the Up buttons!");
}
if (e.KeyValue == 27)
{
MessageBox.Show("You press the Esc buttons!");
}
}
//只能返回一个字符的ASCII码
//不能处理功能键、编辑键、组合键
//KeyChar能区分大小写
//KeyChar字存在于KeyPress中
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 65)
{
MessageBox.Show("You press the A buttons!");
}
if (e.KeyChar == 97)
{
MessageBox.Show("You press the a buttons!");
}
//KeyChar是不区分数字是否在大小哪个键盘的
if (e.KeyChar == 48)
{
MessageBox.Show("You press the 0 buttons!");
}
}
//没有KeyChar
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
//与KeyDown相似
//小键盘的数字0
if (e.KeyValue == 96)
{
MessageBox.Show("You press the 0 buttons in keypad!");
}
//小键盘的数字0
if (e.KeyCode == Keys.NumPad0)
{
MessageBox.Show("You press the 0 buttons in keypad!");
}
//主键盘的数字0
if (e.KeyCode == Keys.D0)
{
MessageBox.Show("You press the 0 buttons in primary keyboard!");
}
}
在winform程序中,经常会用到这几个事件用于控制数字输入,按键动作等操作,但一直没有完全弄清楚他们之间的区别和练习,到底什么时候用哪一个事件合适,以上便是对于这些内容做了一个小小的总结,也是便于以后糊涂的时候有迹可循
如有不同见解,欢迎指出,感谢您的阅读