2016-09-01 9 views
0

Я пишу приложение формы Windows, где мне нужно установить логическое значение true при нажатии клавиши.C# keypress пишет в поле вместо

Простой, однако, поскольку у меня есть текстовое поле и некоторые комбобокс, когда я пытаюсь нажать клавишу, он просто пишет любую клавишу, которую я нажимаю в текстовом поле/comboboxes. Не имеет значения, если я нажму где-нибудь еще в приложении.

Я пробовал делать проект без текстовых полей и комбобокс, и он отлично работает.

Как я могу иметь как поля ввода, так и события нажатия клавиш в одной форме?

ответ

2

Задайте свойство Form.KeyPreview так, чтобы все события нажатия клавиш были переданы обработчикам событий формы. После того, как выполнение попадает на ваши обработчики событий, вы можете установить любые переменные, которые вам нужны, включая настройку булева для каждого нажатия клавиши.

0

Учебное пособие для этого здесь How to: Handle Keyboard Input at the Form Level.

Windows Forms обеспечивает возможность обработки сообщений клавиатуры на уровне формы , прежде чем сообщения достигнут элемента управления.

Для обработки сообщения клавиатуры на уровне формы.

Ручка KeyPress или KeyDown события формы запуска, и установите KeyPreview свойства формы, чтобы верно так, что клавиатура послание получены формами, прежде чем они достигают какие-либо элементы управления на форме.

public Form1() 
    { 
     this.KeyPreview = true; 
     this.KeyPress += 
      new KeyPressEventHandler(Form1_KeyPress); 
    } 

    // Detect all numeric characters at the form level and consume 1, 
    // 4, and 7. Note that Form.KeyPreview must be set to true for this 
    // event handler to be called. 
    void Form1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar >= 48 && e.KeyChar <= 57) 
     { 
      MessageBox.Show("Form.KeyPress: '" + 
       e.KeyChar.ToString() + "' pressed."); 

      switch (e.KeyChar) 
      { 
       case (char)49: 
       case (char)52: 
       case (char)55: 
        MessageBox.Show("Form.KeyPress: '" + 
         e.KeyChar.ToString() + "' consumed."); 
        e.Handled = true; 
        break; 
      } 
     } 
    }