我自己学习C#和.NET。我正在尝试根据this MSDN文章学习如何子类化文本框。我没有使用文章中的确切子类程序,但我自己尝试了一些东西。
我遇到的问题是正确转换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;
}
}
}
}
我尝试了switch ( (Keys)m.WParam )
然后我能够做case Keys.A
这样的事情并且有效。这种方法的问题在于,在这种情况下,我无法测试小写字母a
。此外,case Keys.Left
之类的东西也不起作用。
我应该如何修改我的代码,以便将wParam
与虚拟密钥代码进行正确比较?
答案 0 :(得分:1)
您还需要检查WM_KEYDOWN,请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646268%28v=vs.85%29.aspx
至于你的错误,你忘记了.ToInt32()的大括号! 检查0x70,(小写p),