C #: в событии KeyDown, что я должен использовать, чтобы проверить, какой ключ не работает? - PullRequest
5 голосов
/ 19 февраля 2009

В событии KeyDown у меня есть KeyEventArgs для работы. Он имеет (среди прочего) эти три свойства:

  • e.KeyCode
  • e.KeyData
  • e.KeyValue

Какой я должен использовать для чего?

Ответы [ 4 ]

12 голосов
/ 19 февраля 2009

Редактировать: Почему-то я неправильно прочитал ваш вопрос, чтобы включить проверку действительного символа. Вы изменили это? Я добавил описание каждого.

  • KeyCode - это значение перечисления Keys для ключа, который не работает
  • KeyData соответствует KeyCode, но в сочетании с любыми клавишами SHIFT / CTRL / ALT
  • KeyValue - это просто целочисленное представление KeyCode

Если вам просто нужен символ, я бы, вероятно, рекомендовал использовать событие KeyPress и использовать свойство KeyPressEventArgs . KeyChar . Затем вы можете использовать Char.IsLetterOrDigit () , чтобы узнать, является ли это действительный символ.

Кроме того, вы можете привести KeyEventArgs.KeyCode к символу, а затем использовать Char.IsLetterOrDigit для этого.

1 голос
/ 19 февраля 2009

Я бы предложил использовать свойство KeyCode для проверки перечисления Keys для большинства операций. Однако некоторые из основных отличий, приведенных ниже, могут помочь вам лучше решить, какой из них вам нужен для вашей ситуации.

Отличия:

  • KeyCode - представляет значение перечисления Keys, представляющее ключ, который в данный момент находится в состоянии Down.

  • KeyData - То же, что и KeyCode, за исключением того, что он содержит дополнительную информацию в виде модификаторов - Shift / Ctrl / Alt и т. Д.

  • KeyValue - Числовое значение KeyCode.

0 голосов
/ 19 февраля 2009

См. мой ответ на ваш другой вопрос :

Используйте событие KeyPressed .

Цитата MSDN:

KeyPressEventArgs указывает символ, который составляется, когда пользователь нажимает клавишу. Например, когда пользователь нажимает клавиши SHIFT + K, свойство KeyChar возвращает прописные буквы K.

Таким образом, вам не нужно возиться с e.KeyCode, e.KeyData и e.KeyValue.

0 голосов
/ 19 февраля 2009

Основное использование KeyDown

   private void tbSomeText_KeyDown (object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.B && e.Modifiers != Keys.Shift) {

            MessageBox.Show("You Pressed b");
        }
        else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Shift) {
            MessageBox.Show("You Pressed Shift+A");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...