2009-02-19 1 views

ответ

12

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

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

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

В качестве альтернативы, вы можете отправить KeyEventArgs.KeyCode символу, а затем использовать Char.IsLetterOrDigit.

+0

Я не согласен ... Вы предполагаете, что пользователь не хочет улавливать какие-либо модификаторы, а его ввод ограничен клавиатурой ASCII. – Cerebrus

+0

IsLetterOrDigit работает только с ascii? – Svish

+0

IsLetterOrDigit использует CharUnicodeInfo.GetUnicodeCategory, если символ не является латинским. –

1

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

Отличия:

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

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

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

+0

Но KeyCode и KeyData имеют тот же тип, перечисление ключей. Я не могу найти там лишнего? – Svish

+0

Он будет отличаться только в том случае, если ключ-модификатор (shift/alt/ctrl) не работает. –

+0

ooh, вызывают его флаги? – Svish

0

Очень простой в использовании 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"); 
     } 
    } 
0

См my answer к вашему other question:

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

Цитирование MSDN:

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

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

+0

Да, принял ваш ответ в другом вопросе. Но здесь я больше искал общее объяснение их использования. Вот почему я разделил его. Что-то, что я подумал о juuust, когда я нажал кнопку отправки, так что, извините за путаницу =) – Svish

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