在C#中覆盖bool ProcessKeyPreview

ALI*_*ANI 0 c# winforms

我使用以下代码来处理用户控件中的keydown。但是我想知道如何才能对用户按键进行相同的控制。

const int WM_KEYDOWN = 0x100;
const int WM_KEYUP = 0x101;

protected override bool ProcessKeyPreview(ref Message m)
{
    if (m.Msg == WM_KEYDOWN && (Keys)m.WParam == Keys.A)
    {
        messagebox.show("You have pressed A");
    }

    return base.ProcessKeyPreview(ref m);
}
Run Code Online (Sandbox Code Playgroud)

我想为keypress中的keychar做到这一点。

这些代码只是给我提供示例密钥.A不能让我进行示例keychar ='A'

提前致谢

Han*_*ant 5

KeyPress事件与KeyDown和KeyUp事件非常不同。您只能使用诸如ProcessKeyPreview和ProcessCmdKey之类的替代来覆盖KeyDown事件处理。

这样的覆盖只能看到虚拟键,在任何人的键盘上都相同。然后,KeyDown的默认处理方式是通过Windows内部应用用户选择的特定键盘布局的代码发送虚拟键。如果产生一个打字键,如“a”或“A”或I-鸵鸟政策知道什么韩语键盘然后产生一个按键事件。直接将其传递给具有焦点的控件,您只能通过为其KeyPress事件实现事件处理程序来在控件处对其进行拦截。

上一段中的“我不知道什么”子句是重要的部分。尝试截取键入键通常没有任何意义。除了区分“ a”和“ A”之外,您的软件中有20亿潜在用户从未在他们的生活中键入过“ A”。否则,您不清楚为什么要尝试执行此操作,因此我无法建议其他方法。