Ложные значения ключей передаются при событии keydown - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть родительская форма MDI.Когда пользователь нажимает Enter, я хочу, чтобы приложение закрылось.

Я проверяю событие keydown следующим образом:

 private void MainForm_KeyDown(object sender, KeyEventArgs e)
 {

     if (e.KeyValue == (int)Keys.Enter) 
     {
                    Application.Exit();
     }
 }

Теперь все работает нормально, когда у меня нет нажимаемых элементов управления в форме (Button, TextBox и т. Д.).e.KeyValue имеет значение (int) клавиши ввода (13).Но если я помещу некоторые кнопки или текстовые поля в форму MDI, e.KeyValue возвращает значение ключа Alt Key, т.е. 18. Почему так ??

Так что теперь, если я нажимаю Alt+Enter, форма закрывается;но не только при вводе ключа

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 23 апреля 2011

Вам нужно обработать KeyPress немного раньше.Следующий код будет работать для вас:

    protected override bool ProcessKeyPreview(ref System.Windows.Forms.Message m)
    {
        int _ENTER = 13;
        int _KEYUP = 257;
        if (m.Msg == _ENTER && (int)m.WParam == _KEYUP)
        {
            Application.Exit();
        }
        return base.ProcessKeyPreview(ref m);
    }
0 голосов
/ 23 апреля 2011

Использование e.KeyCode and e.Modifiers;

...