10

我有一个 WinForms 表单 (C#/.Net),它包含一个 PictureBox、MenuStrip、Panel 和两个 Button 控件。

我需要为整个窗口的箭头键检测 KeyDown 事件;即,当窗口位于前台时,无论哪个子控件具有焦点,我都需要知道何时按下箭头键并在发生时执行一些代码。

我不想为每个控件附加一个事件处理程序。有没有更好的办法?我该怎么做?

编辑:按照下面的答案建议使用 KeyPreview,我能够检测到其他键。无法检测箭头键。只有当我的表单中的按钮被禁用时,我才能检测到箭头键。否则,他们会来回关注焦点而不触发事件。如何检测表单上带有按钮的箭头键?

4

2 回答 2

16

覆盖 ProcessCmdKey() 方法以检测箭头键。

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == Keys.Left) {
            Console.WriteLine("left");
            return true;
        }
        // etc..
        return base.ProcessCmdKey(ref msg, keyData);
    }
于 2010-12-07T16:58:05.383 回答
2

您必须在表单中将 KeyPreview 属性设置为 true

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx

这样,与键相关的事件将在 Form 中触发,然后在焦点控件中触发。

于 2010-12-07T16:19:00.373 回答