Определить ключ стрелки - KeyDown для всего окна - PullRequest
11 голосов
/ 07 декабря 2010

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

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

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

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

Ответы [ 2 ]

16 голосов
/ 07 декабря 2010

Переопределите метод 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 голосов
/ 07 декабря 2010

Необходимо установить для свойства KeyPreview значение true в форме

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

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

...