winform无法屏蔽回车事件、KeyPress事件不执行问题解决

项目场景:

一个winform消息提示框,底部俩按钮。必须点击按钮,不允许回车键触发按钮的click事件


问题描述:

不管是按钮的keypress事件还是form的keypress事件都无法拦截。
form的AcceptButtion也是设置的null,回车还是会触发左边按钮的click事件。
改变按钮的TabIndex回车键会触发值更小的那个按钮(如果有这种需求可以考虑这个方案😀)
打断点发现这3个键盘事件都没有进:

		private void MessageBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (Char)Keys.Enter)
            {
                e.Handled = true;               
            }
        }

        private void CancelBtn_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (Char)Keys.Enter)
            {
                e.Handled = true;
            }
        }
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (Char)Keys.Enter)
            {
                e.Handled = true;
            }
            else
            {
                base.OnKeyPress(e);
            }
        }

原因分析:

各种百度结果都指向键盘事件。
一度怀疑我用的SunnyUI,form继承的UIForm有啥拦截处理,又是看源码又是找资料,结论也不是。
最后在重写方法列表里面看到了ProcessDialogKey方法,灵光一闪,窗体不就是以showDialog方式打开的么。


解决方案:

重写ProcessDialogKey方法:

		protected override bool ProcessDialogKey(Keys keyData)
        {
            //屏蔽回车键
            if (keyData == Keys.Enter)
            {
                return true;
            }
            return base.ProcessDialogKey(keyData);
        }

问题完美解决

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值