2012-11-27 16 views
6

'da alfasayısal tuşa basıldığını belirle Windows 8 için bir uygulama üzerinde çalışıyorum.Windows Runtime

Basılı bir anahtarın alfasayısal olup olmadığını belirlemeye çalışıyorum. KeyRoutedEventArgs sınıfı hiçbir yardımcıya sahip görünmüyor.

Baktığım bir şey var mı? Kullanıcının bir harf veya sayı girip girmediğini belirlemenin en iyi yolu nedir?

+0

Eğer arıyorsunuz Örneğin

'KeyRoutedEventArgs.Key'? – shahkalpesh

+1

Buna dikkat edin, Windows Mağazası uygulamaları dünya çapında dağıtılmaktadır. Özellikle Asya'daki kullanıcıların sayıları ve harfleri neye benzediğine dair alışılmadık görüşleri var. –

cevap

6

KeyRoutedEventArgs, bir VirtualKey olan Key değerini içerir.

Key numaralı telefonun this list numaralı telefondan destek isteyip istemediğinizi test edebilirsiniz. İşte

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

basıldığında kilit bir telefon numarasına (rakam, boşluk, nokta ve +) için uygundur olmadığını kontrol etmek için bir örnek:

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