10

我想在 C# 中的 Windows 面板控件中获取按键事件,对我有任何帮助吗...

4

4 回答 4

13

您应该处理Panel.KeyPress事件。

例子

public void MyKeyPressEventHandler(Object sender, KeyPressEventArgs e)
{
    ... do something when key is pressed.
}

...

(MyPanel as Control).KeyPress += new KeyPressEventHandler(MyKeyPressEventHandler);
于 2010-01-25T12:25:27.207 回答
9

问题是,一开始你的主窗体得到了 KeyPress 并且会立即将此消息发送到活动控件。如果这不能处理此按键,它将冒泡到父控件等等。

要拦截这个链,你必须在你的Form.KeyPreviewto中true添加一个处理程序到Form.KeyPress. 现在您可以在表单中处理按下的键。

于 2010-01-25T12:51:23.560 回答
3

“面板”对象无法正确接收“按键”事件。

我创建了Panel重载:

public class PersoPanel : Panel

并使用了覆盖的方法ProcessCmdKey

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

拦截按下的键:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    MessageBox.Show("You press " + keyData.ToString());

    // dO operations here...

    return base.ProcessCmdKey(ref msg, keyData);
}
于 2010-03-16T10:00:55.650 回答
1

面板 + 按键 - C# 讨论板 - CodeProject

http://www.codeproject.com/Messages/704386/Panel-plus-Keypress.aspx

于 2010-12-10T08:24:58.217 回答