Определить клавишу со стрелкой - KeyDown для всего окна
У меня есть форма WinForms (С#/. Net) и содержит элементы PictureBox, MenuStrip, Panel и две кнопки.
Мне нужно обнаружить событие KeyDown для клавиш со стрелками для всего окна; то есть, когда окно находится на переднем плане, независимо от того, какой из дочерних элементов управления имеет фокус, мне нужно знать, когда нажата клавиша со стрелкой и выполнить какой-либо код, когда это произойдет.
Я не хочу идти и присоединять обработчик событий для каждого элемента управления. Есть ли способ лучше? Как я могу это сделать?
Изменить: Используя KeyPreview, как показано в ответе ниже, я могу обнаружить другие ключи. Невозможно обнаружить клавиши со стрелками. Я могу обнаруживать клавиши со стрелками только тогда, когда кнопки в моей форме отключены. Или же они занимают фокус взад и вперед и не запускают это событие. Как определить стрелки с кнопками в форме?
Ответы
Ответ 1
Отменить метод 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);
}
Ответ 2
Вы должны установить для свойства KeyPreview значение true в форме
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx
При этом события, связанные с ключом, будут запущены в Форме до того, как они будут запущены в сфокусированном элементе управления.