C# KeyDown事件

当需要持续、切换点击鼠标时,鼠标结合键盘的操作效率会更高,因此记录下窗体KeyDown和KeyUp时遇到的一些小问题

1、窗体的KeyPreview属性需要设置为true

2、将keyPreview值设置成true后按功能键和数字键都没有问题,但是按方向键任然没有触发KeyDown事件?

      解决:覆盖默认的系统键处理方式,遇到方向键,则直接返回,系统不处理,这样键值就会被传递到窗体,触发KeyDown事件。

        protected override bool ProcessDialogKey(Keys keyData)
        {
            if (keyData == Keys.Up || keyData == Keys.Down ||
                keyData == Keys.Left || keyData == Keys.Right)
                return false;
            else
                return base.ProcessDialogKey(keyData);
        }

3、当按下空格键时,会把窗体中获取焦点的控件(比如按钮,文本框等)的单击事件触发,需要屏蔽这个现象

            if (e.KeyCode == Keys.Space)
            {

                e.Handled = true;//表示已经处理了键盘消息
            }

窗体事件:

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)
            {
                #region 窗体相关操作
                if (dicQQDJ.ContainsKey(currentPic))
                    pictureDJ.Image = (Image)dicQQDJ[currentPic];
                #endregion
                e.Handled = true;//表示已经处理了键盘消息,屏蔽其他控件时间
            }
            else if (e.KeyCode == Keys.Left)
            {
                btnUp_Click(null, null);
            }
            else if (e.KeyCode == Keys.Right)
            {
                btnDown_Click(null, null);
            }
        }
        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)
            {
                #region 窗体相关操作
                if (dicQQDJ.ContainsKey(currentPic))
                    pictureDJ.Image = (Image)dicHQDJ[currentPic];
                #endregion
                e.Handled = true;//表示已经处理了键盘消息,屏蔽其他控件时间
            }
        }

Reference:

WinForm中屏蔽空格键对按钮的作用

C#窗体无法接受Keydown事件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值