Определить клавишу со стрелкой - KeyDown для всего окна

У меня есть форма WinForms (С#/. Net) и содержит элементы PictureBox, MenuStrip, Panel и две кнопки.

Мне нужно обнаружить событие KeyDown для клавиш со стрелками для всего окна; то есть, когда окно находится на переднем плане, независимо от того, какой из дочерних элементов управления имеет фокус, мне нужно знать, когда нажата клавиша со стрелкой и выполнить какой-либо код, когда это произойдет.

Я не хочу идти и присоединять обработчик событий для каждого элемента управления. Есть ли способ лучше? Как я могу это сделать?

Изменить: Используя KeyPreview, как показано в ответе ниже, я могу обнаружить другие ключи. Невозможно обнаружить клавиши со стрелками. Я могу обнаруживать клавиши со стрелками только тогда, когда кнопки в моей форме отключены. Или же они занимают фокус взад и вперед и не запускают это событие. Как определить стрелки с кнопками в форме?

2 ответа

Отменить метод 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);
 }


Вы должны установить для свойства KeyPreview значение true в форме

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

При этом события, связанные с ключом, будут запущены в Форме до того, как они будут запущены в сфокусированном элементе управления.

licensed under cc by-sa 3.0 with attribution.