确定在Windows运行时中按下的键是否为字母数字

时间:2012-11-27 13:38:05

标签: c# .net windows-runtime

我正在开发Windows 8的应用。

我正在尝试确定按下的按键是否为字母数字。 KeyRoutedEventArgs类似乎没有提供任何帮助。

我有什么东西可以俯瞰吗?确定用户是否输入了字母或数字的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

KeyRoutedEventArgs包含Key值,即VirtualKey。

您只需测试Key是否在您要支持的代码this list内。

例如:

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

答案 1 :(得分:0)

这里有一个示例,用于检查按下的键是否适合电话号码(数字,空格,点和+):

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