【c#】键盘事件(keypress keydown keyup)

【前言】

        最近小编在学习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程序中,经常会用到这几个事件用于控制数字输入,按键动作等操作,但一直没有完全弄清楚他们之间的区别和练习,到底什么时候用哪一个事件合适,以上便是对于这些内容做了一个小小的总结,也是便于以后糊涂的时候有迹可循

       

       如有不同见解,欢迎指出,感谢您的阅读微笑

      



  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值