C#重写ProcesscmdKey后出现的异常问题,如何解决?

本人在写一个计算器,通过重写ProcesscmdKey来进行键盘快捷键设置

但是出现这么一个问题:

如果输入法是中文状态,程序就只能响应键盘上的数字键,无法响应键盘输入字母以及符号。

在网上查了资料才知道是被输入法截流了,网上给出的解决方法是把ImeMode设置为Disable。 我修改完了以后这个问题只解决了一半。

新问题是在首次打开界面无任何操作时仍然无法响应字母以及符号,但是只要点击一下界面上任意一个按键后程序就可以正常响应所有键盘按键了。非常蛋疼不知道问题出在哪,希望大佬们给指点迷津

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            switch (keyData)
            {
                case Keys.D0: case Keys.NumPad0: bnum0.PerformClick(); return true;
                case Keys.D1: case Keys.NumPad1: bnum1.PerformClick(); return true;
                case Keys.D2: case Keys.NumPad2: bnum2.PerformClick(); return true;
                case Keys.D3: case Keys.NumPad3: bnum3.PerformClick(); return true;
                case Keys.D4: case Keys.NumPad4: bnum4.PerformClick(); return true;
                case Keys.D5: case Keys.NumPad5: bnum5.PerformClick(); return true;
                case Keys.D6: case Keys.NumPad6: bnum6.PerformClick(); return true;
                case Keys.D7: case Keys.NumPad7: bnum7.PerformClick(); return true;
                case Keys.D8: case Keys.NumPad8: bnum8.PerformClick(); return true;
                case Keys.D9: case Keys.NumPad9: bnum9.PerformClick(); return true;
                case Keys.Decimal: case Keys.OemPeriod: 小数点.PerformClick(); return true;
                case Keys.Shift | Keys.D1: 阶乘.PerformClick(); return true;
                case Keys.E: be.PerformClick(); return true;
                case Keys.P: bπ.PerformClick(); return true;
                case Keys.Escape: 清零.PerformClick(); return true;
                case Keys.Back: case Keys.Delete: 退格.PerformClick(); return true;
                case Keys.K: 开方.PerformClick(); return true;
                case Keys.N: 乘方.PerformClick(); return true;
                case Keys.Oemplus: case Keys.Add: 加号.PerformClick(); return true;
                case Keys.OemMinus: case Keys.Subtract: 减号.PerformClick(); return true;
                case Keys.Shift | Keys.D8: case Keys.Multiply: 乘号.PerformClick(); return true;
                case Keys.OemQuestion: case Keys.Divide: 除号.PerformClick(); return true;
                case Keys.Shift | Keys.D5: 取余.PerformClick(); return true;
                case Keys.Enter: 等号.PerformClick(); return true;
                case Keys.Shift | Keys.D9: case Keys.OemOpenBrackets: 左括号.PerformClick(); return true;
                case Keys.Shift | Keys.D0: case Keys.OemCloseBrackets: 右括号.PerformClick(); return true;
                default: return true;
            }
        }

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。