检测箭头键 - 整个窗口的KeyDown

时间:2010-12-07 16:16:26

标签: .net winforms c#-4.0 keydown

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

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

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

编辑:按照以下答案的建议使用KeyPreview,我能够检测到其他密钥。无法检测箭头键。只有当我的表单中的按钮被禁用时,我才能检测到箭头键。否则,他们会来回聚焦,不会发生事件。如何通过表单上的按钮检测箭头键?

2 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:2)

您必须在表单

中将KeyPreview属性设置为true

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

这样,与键相关的事件将在聚焦控件中被触发之前在表单中触发。