2013-10-12 2 views
3

Я искал, чтобы узнать значения для < и> ниже System.Windows.Forms.Keys, но я могу найти только OemOpenBrackets и OemCloseBrackets. Может кто-нибудь, пожалуйста, помогите мне?Перечисление меньше, чем перечисление ключей в C#

+3

.NET действительно большой; если вы говорите об определенном классе, полностью квалифицируйте его. –

ответ

2

Перечисление Keys определяет виртуальные коды клавиш, а для угловых скобок нет. Угловые скобки могут отображаться на разных клавишах для разных раскладок клавиатуры, так что нет easy надежный способ преобразования виртуального ключа в символ.

Лучшим вариантом является использование KeyPress событие (как это было предложено Hans), и сравнить KeyPressEventArgs.KeyChar собственность непосредственно с '<' или '>' символов.

private void MyKeyPressHandler(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar == '<') 
     { 
      MessageBox.Show("Yippee"); 
     } 
    } 

Если по каким-то причинам вы вынуждены использовать код ключа от KeyDown события, то ваш код не будет работать для различных раскладок клавиатуры.

К примеру, на моей клавиатуре < и> находятся на запятая и период ключей, я мог бы использовать Oemcomma и OemPeriod, в сочетании с Shift:

 if (e.KeyCode == Keys.Oemcomma && e.Shift) 
     { 
      MessageBox.Show("Works for certain keyboards."); 
     } 
+0

Он должен быть в форме «if (e.KeyCode == Keys.Oemcomma && Keys.Shift)», но он не позволяет использовать два значения для e.keycode. Должен ли я просто сделать другое заявление if внутри первого? – Mercifies

+0

@Mercifies Я не понимаю ваш комментарий. – Ergwun

+0

Он выдает ошибку, говоря, что && нельзя применить к операндам типа bool – Mercifies

3

Вы делаете это неправильно, используйте KeyPress событие вместо KeyDown/Up.

Не каждая раскладка клавиатуры в мире такая же, как ваша. Например, на немецком языке или French keyboard, < создается дополнительным ключом рядом с левой клавишей Shift, удерживая Shift и нажимая на эту клавишу. Только событие KeyPress надежно правильно распознает нажатие клавиши.

+0

+1 Это лучшее решение, чем использование ключевого кода из события нажатия клавиши. – Ergwun

0

Если вы делаете это с помощью элемента управления WPF, вам нужно использовать событие PreviewTextInput. Я обнаружил это, пытаясь получить «[» на французской клавиатуре.

private void OnRichTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    Debug.WriteLine("text = " + e.Text); 
    Debug.WriteLine("sys txt = " + e.SystemText); 
    if (e.Text == "<") { /* do something */ } 
} 

Шон

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