如何在C#中的Windows面板控件中获取Keypress事件

rat*_*tty 10 c# events keypress winforms

我想在c#的windows面板控件中获取keypress事件,对我来说是否有任何身体帮助......

Jam*_*mes 11

您应该处理Panel.KeyPress事件.

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

...

(MyPanel as Control).KeyPress += new KeyPressEventHandler(MyKeyPressEventHandler);
Run Code Online (Sandbox Code Playgroud)

  • 我知道这在游戏中有点晚了,但Panel Control不会在没有焦点的情况下收到关键相关事件,点击面板自然不会让它集中注意力.您可以通过在Panel的MouseDown事件处理程序中调用MyPanel.Focus()来解决此问题.一旦Panel具有焦点,即使没有在父Form上激活KeyPreview,KeyUp,KeyDown和KeyPress事件也将起作用. (9认同)

Oli*_*ver 9

问题是,首先你的主表单得到了KeyPress,并立即将此消息发送到活动控件.如果没有处理此按键,则会将其冒泡到父控件,依此类推.

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