0

我使用以下这些代码来处理用户控件中的按键。但我想知道如何为按键的用户控制做同样的事情。

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);
}

我想在按键中为 keychar 执行此操作。

这些代码只是给我例如键。A 不能让我工作例如 keychar ='A'

提前致谢

4

1 回答 1

5

KeyPress 事件与 KeyDown 和 KeyUp 事件非常不同。您只能使用 ProcessKeyPreview 和 ProcessCmdKey 等覆盖来覆盖 KeyDown 事件处理。

这种覆盖只看到虚拟键,在任何人的键盘上都是一样的。KeyDown 的默认处理然后通过应用用户选择的特定键盘布局的 Windows 内的代码发送虚拟键。如果这会产生一个打字键,比如韩语键盘上的“a”或“A”或我不知道什么,那么就会产生一个 KeyPress 事件。它直接传递给具有焦点的控件,您只能通过为其 KeyPress 事件实现事件处理程序来在控件处拦截它。

上一段中的 I-don't-know-what 子句是重要部分。尝试拦截键入键通常没有意义。除了“a”和“A”之间的区别之外,还有 20 亿潜在的软件用户在他们的生活中从未输入过“A”。目前尚不清楚您为什么要这样做,所以我不能建议另一种方法。

于 2012-05-17T12:07:58.647 回答