C# 将wParam转换为虚拟密钥代码

C# 将wParam转换为虚拟密钥代码,c#,.net,winforms,C#,.net,Winforms,我正在自学C#和.NET。我试图学习如何根据MSDN文章对textbox进行子类化。我没有使用文章中的确切子类过程,但是我自己尝试了一些东西 我遇到的问题是正确地转换wParam,以便将其与虚拟密钥代码进行比较 下面是子类程序的代码,注释中指出了有问题的部分: using System.Windows.Forms; namespace BtnEdit { public class SubclassEdit : TextBox { private const in

我正在自学C#和.NET。我试图学习如何根据MSDN文章对textbox进行子类化。我没有使用文章中的确切子类过程,但是我自己尝试了一些东西

我遇到的问题是正确地转换
wParam
,以便将其与虚拟密钥代码进行比较

下面是子类程序的代码,注释中指出了有问题的部分:

using System.Windows.Forms;

namespace BtnEdit
{
    public class SubclassEdit : TextBox
    {
        private const int WM_CHAR = 0x102;
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_CHAR:
                    {
                        // how to convert m.WParam ???
                        switch (m.WParam.ToInt32)
                        {
                            case 0x50: // this gives error
                                this.Text = "Pressed key P";
                                break;
                            default:
                                base.WndProc(ref m);
                                break;
                        }
                    }
                    break;
                default:
                    //pass other messages to default procedure
                    base.WndProc(ref m);
                    break;
            }
        }
    }
}
我尝试了
开关((Keys)m.WParam)
,然后我能够做一些类似于
的case Keys.A
的事情,它成功了。这种方法的问题是,在这种情况下,我无法测试小写字母
a
。另外,像
case Keys.Left
这样的东西也不起作用

问题:
我应该如何修改我的代码,以便能够正确地将
wParam
与虚拟键代码进行比较?

您还需要检查WM\U KEYDOWN,请参阅:

至于您的错误,您忘记了.ToInt32()中的大括号!
检查0x70(小写p),

您也需要检查WM_KEYDOWN
我想这是为了帮助我使用
键。我的文章的左侧部分。不过,您还没有尝试帮助我正确转换
wParam
,这样我就可以查看字母
a
(例如)是否被按下…更新了我的答案,包括解决方案我很抱歉不能接受,但我还有最后一个问题:当我按下
SHIFT+P
时,代码会工作,检测资本P。我如何检测小P?更新,0x70是小P。你能告诉我你在哪里找到这个值吗?其他UNICODE字符如
Ч
或其他一些中文符号呢?我为自己的痛苦道歉,但我总是倾向于正确地学习每件事。MSDN文档中没有提到这一点,这就是我为什么要问的原因。致以最诚挚的问候。我只想提到,还有其他(一些人可能认为更简单)实现自定义击键逻辑的方法。例如,您可以覆盖
OnKeyDown
并使用此代码
base.OnKeyDown(e),而不是覆盖
WndProc
;如果(e.KeyCode==Keys.P){this.Text=“Pressed key P”e.SuppressKeyPress=true;}
@gannaway:谢谢,我也想到了类似的想法。我需要学习子类化,因为它对于其他控件也很方便。谢谢你的建议。顺致敬意,