覆盖某些键事件的Windows窗体默认行为

时间:2011-11-23 16:30:38

标签: c# .net winforms

我用一个简单的游戏创建了一个Form。游戏需要箭头键输入,但我在表格上放置的几个按钮正在窃取这些关键事件。

据我所知,这是任何Windows窗体应用程序的默认行为,以便用户能够在各种控件之间更改焦点。

我的问题是,如何解决这个问题,并确保我可以使用这些密钥的输入?

2 个答案:

答案 0 :(得分:1)

您可以覆盖Form.ProcessCmdKey方法,以便能够处理用户的每次按键操作。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Down || keyData == Keys.Up)
    {
        // Process keys

        return true;
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

返回true表示不应执行进一步的处理,并且密钥的默认行为不会产生任何影响。例如,您将无法再使用 TAB 键在控件之间移动焦点,因此您可能只应对仅由游戏处理的按键返回true。

答案 1 :(得分:0)

覆盖表单的OnKeyDown方法。并且不要忘记最后调用base.OnKeyDown。