2012-11-27 15 views
6

Sto lavorando a un'app per Windows 8.Determina il tasto premuto è alfanumerico in Windows Runtime

Sto provando a determinare se un tasto premuto è alfanumerico. La classe KeyRoutedEventArgs non sembra fornire alcun aiuto.

C'è qualcosa che sto trascurando? Qual è il modo migliore per determinare se l'utente ha inserito una lettera o un numero?

+0

Siete alla ricerca di 'KeyRoutedEventArgs.Key'? – shahkalpesh

+1

Fai attenzione, le app di Windows Store sono distribuite in tutto il mondo. In particolare, gli utenti in Asia hanno opinioni inusuali su come appaiono i numeri e le lettere. –

risposta

6

Il KeyRoutedEventArgs contiene un valore che è un VirtualKey.

È sufficiente verificare se lo Key si trova all'interno dei codici che si desidera supportare da this list.

Ad esempio:

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

Ecco un campione per verificare se un tasto premuto è adatto per un numero di telefono (cifre, spazi, punti e +):

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; 
    } 
Problemi correlati