我正在为Windows 8
.
我正在尝试确定按下的键是否是字母数字。该KeyRoutedEventArgs
课程似乎没有提供任何帮助。
有什么我忽略的吗?确定用户输入的是字母还是数字的最佳方法是什么?
我正在为Windows 8
.
我正在尝试确定按下的键是否是字母数字。该KeyRoutedEventArgs
课程似乎没有提供任何帮助。
有什么我忽略的吗?确定用户输入的是字母还是数字的最佳方法是什么?
KeyRoutedEventArgs
包含一个Key
值,它是一个 VirtualKey 。
您可以简单地测试 是否在Key
您希望从此列表中支持的代码中。
例如:
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
}
}
这里有一个示例,用于检查按下的键是否非常适合电话号码(数字、空格、点和 +):
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;
}