我可以确定KeyEventArg是字母还是数字?

时间:2011-03-13 23:35:23

标签: c# winforms event-handling keyeventargs

有没有办法确定某个密钥是A-Z中的字母/数字(0-9KeyEventArgs)?或者我必须自己制作?我找到了e.KeyCode的方法,这是准确的吗?

if(((e.KeyCode >= Keys.A       && e.KeyCode <= Keys.Z )
 || (e.KeyCode >= Keys.D0      && e.KeyCode <= Keys.D9 )
 || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))

4 个答案:

答案 0 :(得分:25)

您可以在事件参数的char.IsLetterOrDigit()上使用KeyCode方法:

bool isLetterOrDigit = char.IsLetterOrDigit((char) keyEventArgs.KeyCode);

答案 1 :(得分:9)

答案 2 :(得分:8)

在WPF中?使用PreviewTextInput或TextInput事件而不是KeyDown

答案 3 :(得分:0)

Char.IsLetter()接受一些OEM密钥代码,这些代码被视为字母字符。

我的情况是,当我键入键盘(波浪号)时,此键码已返回OEM3。

我检查了值(波浪号)并显示

“ 192'A'”

但是实际输入的是“ A

“ 65'A'”

结果,两个都通过Char.IsLetter()作为True。

为避免这种情况,我将下面的代码放进去。

private bool IsAlphabetOrDigit(System.Windows.Forms.KeyEventArgs e)
{
    var keyCode = (char)e.KeyCode;
    if ( false == char.IsNumber( keyCode ) &&  false == ((keyCode >= 'a' && keyCode <= 'z') || (keyCode >= 'A' && keyCode <= 'Z')))
    {
        return false;
    }

    return true;
}