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

11 .net keydown winforms c#-4.0

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

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

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

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

Han*_*ant 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);
    }
Run Code Online (Sandbox Code Playgroud)