16

有没有办法确定键是否是字母/数字(A-Z0-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

4 回答 4

30

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

bool isLetterOrDigit = char.IsLetterOrDigit((char) keyEventArgs.KeyCode);
于 2011-03-13T23:40:31.983 回答
9

Char.IsNumber()Char.IsLetter()

于 2011-03-13T23:37:36.773 回答
8

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

于 2011-05-03T16:45:07.583 回答
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;
}
于 2020-08-14T05:19:48.380 回答