2013-09-04 2 views
6

Я пытаюсь поймать F5 на System.Windows.Forms для этого я написал:Поймайте KeyUp Событие на WinForm C#

partial class MainForm 
{ 
    (...) 
    this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyUp); 
    (...) 
} 

public partial class MainForm : Form 
{ 
    (...) 

    private void MainForm_KeyUp(object sender, KeyEventArgs e) 
    { 
     Log("MainForm_KeyUp"); 
     if (e.KeyCode == Keys.F5) 
     { 
      RefreshStuff(); 
     } 
    } 
} 

Но мое событие ловли выглядит не работает.

Знаете ли вы, как cactch EventKey на System.Windows.Forms?

+0

Вы можете попробовать протестировать его, выполнив что-то вроде этого .... throw new Exception (e.KeyCode.ToString()); .... Может быть, это даст вам ключ к тому, что вы кодируете, вы должны использовать. Кроме того, обязательно используйте e.Handled = true; – ismellike

+0

Поместите точку останова на первую строку внутри 'MainForm_KeyUp' и убедитесь, что она на самом деле попадает. Что такое 'this.KeyUp + = ...' in? Стор? Метод? Действительно ли этот метод работает? Возможно, вы фактически не подписаны на событие «KeyUp» ... –

+0

@ismellike и Grant Winney, добавив исключение или точку останова, не делает что-то еще. Даже я не получил что-то из своего журнала. Это подтверждает, что событие вообще не поймано. – mickro

ответ

9

keypreview property формы должен быть установлен истинный

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

+1

+1 Вау, я некоторое время работал с 'WinForms' и не знал об этом. Узнал что-то новое ... –

Смежные вопросы