WPF密钥是数字或数字

use*_*657 14 c# wpf key keydown

previewKeyDown在窗口中有方法,我想知道按下的键只有A-Z字母或1-0数字(没有anyF1..12,输入,ctrl,alt等 - 只是字母或数字).

我试过了Char.IsLetter,但我需要给char,所以e.key.ToString()[0]不起作用,因为它几乎每次都是一封信.

Jon*_*Jon 22

这样的事情会做:

if ((e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9))
Run Code Online (Sandbox Code Playgroud)

当然,您还必须检查是否根据您的要求没有按下CTRL等修饰键.


Kha*_*han 11

e.Key 给你一个成员 enum System.Windows.Input.Key

您应该能够执行以下操作以确定它是字母还是数字:

var isNumber = e.Key >= Key.D0 && e.Key <= Key.D9;
var isLetter = e.Key >= Key.A && e.Key <= Key.Z;
Run Code Online (Sandbox Code Playgroud)


Rac*_*hel 6

在您的特定情况下,JonJeffery提供的答案可能是最好的,但是如果您需要测试字符串的其他字母/数字逻辑,那么您可以使用KeyConverter类将 a 转换System.Windows.Input.Key为字符串

var strKey = new KeyConverter().ConvertToString(e.Key);
Run Code Online (Sandbox Code Playgroud)

您仍然需要检查是否有任何修饰键被按下(Shift、Ctrl 和 Alt),还应该注意这仅适用于字母和数字。特殊字符(如逗号、引号等)的显示方式与e.Key.ToString()


小智 5

试试这个,它有效。

    private void txbNumber_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key >= Key.D0 && e.Key <= Key.D9) ; // it`s number
        else if (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ; // it`s number
        else if (e.Key == Key.Escape || e.Key == Key.Tab || e.Key == Key.CapsLock || e.Key == Key.LeftShift || e.Key == Key.LeftCtrl ||
            e.Key == Key.LWin || e.Key == Key.LeftAlt || e.Key == Key.RightAlt || e.Key == Key.RightCtrl || e.Key == Key.RightShift ||
            e.Key == Key.Left || e.Key == Key.Up || e.Key == Key.Down || e.Key == Key.Right || e.Key == Key.Return || e.Key == Key.Delete ||
            e.Key == Key.System) ; // it`s a system key (add other key here if you want to allow)
        else
            e.Handled = true; // the key will sappressed
    }
Run Code Online (Sandbox Code Playgroud)