2012-11-27 12 views
6

Pracuję nad aplikacją dla Windows 8.Ustalono, że naciśnięty jest klawisz alfanumeryczny w systemie Windows Runtime

Próbuję określić, czy naciśnięty klawisz jest alfanumeryczny. Klasa KeyRoutedEventArgs nie zapewnia żadnych pomocników.

Czy jest coś, co przeoczyłem? Jaki jest najlepszy sposób ustalenia, czy użytkownik wprowadził literę lub numer?

+0

Poszukujecie 'KeyRoutedEventArgs.Key'? – shahkalpesh

+1

Należy zachować ostrożność, aplikacje Windows Store są rozpowszechniane na całym świecie. Szczególnie użytkownicy w Azji mają niezwykłe opinie na temat tego, jak wyglądają cyfry i litery. –

Odpowiedz

6

Wartość KeyRoutedEventArgs zawiera wartość Key, która jest kodem wirtualnym.

Możesz po prostu sprawdzić, czy kod Key mieści się w kodach, które chcesz obsłużyć od this list.

Na przykład:

private void MyKeyDown(object sender, KeyRoutedEventArgs e) 
{ 
    int keyValue = (int)e.Key; 
    if ((keyValue >= 0x30 && keyValue <= 0x39) // numbers 
    || (keyValue >= 0x41 && keyValue <= 0x5A) // letters 
    || (keyValue >= 0x60 && keyValue <= 0x69)) // numpad 
    { 
     // do something 
    } 
} 
0

Tutaj próbki w celu sprawdzenia, czy naciśnięty klawisz jest dobrze nadaje się do numeru telefonu (cyfry, spacje, kropki i +):

using Windows.System; 
    ... 
    bool isDigitKey(VirtualKey keyValue) 
    { 
     return ((keyValue >= VirtualKey.Number0 && keyValue <= VirtualKey.Number9)|| 
      (keyValue >= VirtualKey.NumberPad0 && keyValue <= VirtualKey.NumberPad9)); 
    } 
    private void TextBoxTo_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     // Characters for phone numbers (+, ., space, digits) 
      Boolean isCharFiltered = !isDigitKey(e.Key)  && // Digits 
           (e.Key != VirtualKey.Space) && // Space 
           (e.Key != VirtualKey.Add)  && // + on NumPad 
           ((int)e.Key != 0xbb)   && // + which is not correctly mapped to VirualKey.Add 
           (e.Key != VirtualKey.Decimal) && // . on NumPad 
           ((int)e.Key != 0xbe);   // . which is curiously mapped to Shift 
     // Unfortunately, we can't filter à, é and è on a french keyboard because these keys are mapped to Number0, Number2 and Number7 

     e.Handled = isCharFiltered; 
    } 
Powiązane problemy