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

发布于 2024-10-21 11:28:54 字数 494 浏览 8 评论 0原文

有没有办法确定 KeyEventArgs 中的键是否为字母/数字(AZ0-9)?还是我必须自己做?我找到了一种方法 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))

Is there a way to determine if a key is letter/number (A-Z,0-9) in the KeyEventArgs? Or do I have to make it myself? I found a way with e.KeyCode, is that accurate?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦途 2024-10-28 11:28:54

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

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

You can use the char.IsLetterOrDigit() method on the KeyCode of the event args:

bool isLetterOrDigit = char.IsLetterOrDigit((char) keyEventArgs.KeyCode);
平安喜乐 2024-10-28 11:28:54

在 WPF 中?使用 PreviewTextInput 或 TextInput 事件代替 KeyDown

In WPF? Use PreviewTextInput or TextInput events instead of KeyDown

空‖城人不在 2024-10-28 11:28:54

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

我的情况是,当我输入键盘(波形符)时,此 Keycode 返回 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;
}

Char.IsLetter() accepts some of OEM key codes that was treated as alphabetical characters.

My case was when I typed a keyboard (tilde) then this Keycode was returned OEM3.

I inspected the value (tilde) and it says

"192 'A'"

But actual typing 'A' was

"65 'A'"

As a result, both passed Char.IsLetter() as True.

To avoid this, I put below code.

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文