我有一个WinForms表单(C#/ .Net),它包含一个PictureBox,MenuStrip,Panel和两个Button控件。
我需要检测整个窗口的箭头键的KeyDown事件;也就是说,当窗口在前台时,无论哪个子控件都有焦点,我都需要知道何时按下箭头键并在发生时执行一些代码。
我不想为每个控件附加事件处理程序。有没有更好的办法?我该怎么办?
编辑:按照以下答案的建议使用KeyPreview,我能够检测到其他密钥。无法检测箭头键。只有当我的表单中的按钮被禁用时,我才能检测到箭头键。否则,他们会来回聚焦,不会发生事件。如何通过表单上的按钮检测箭头键?
答案 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属性设置为truehttp://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx
这样,与键相关的事件将在聚焦控件中被触发之前在表单中触发。