16

我的窗口中有previewKeyDown方法,我想知道按下的键只是A-Z字母或1-0数字(没有任何 F1..12、enter、ctrl、alt 等 - 只是字母或数字)。

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

4

7 回答 7

30

这样的事情会做:

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

当然,您还必须检查是否根据您的要求按下了诸如 CTRL 之类的修饰键。

于 2013-02-12T14:05:31.377 回答
11

e.Key is giving you a member of the enum System.Windows.Input.Key

You should be able to do the following to determine whether it is a letter or a number:

var isNumber = e.Key >= Key.D0 && e.Key <= Key.D9;
var isLetter = e.Key >= Key.A && e.Key <= Key.Z;
于 2013-02-12T14:07:26.173 回答
6

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

var strKey = new KeyConverter().ConvertToString(e.Key);

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

于 2013-02-12T14:23:40.793 回答
4

试试这个,它有效。

    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
    }
于 2014-06-29T02:54:54.403 回答
0

添加对 Microsoft.VisualBasic 的引用并使用 VB IsNumeric 函数,结合 char.IsLetter()。

于 2013-02-12T14:09:14.250 回答
0

有点粘,但它有效:)

 private void TextBox_KeyDown(object sender, KeyEventArgs e)
    {
        Regex R = new Regex("^([A-Z]|[0-9]){1}$");

        var strKey = new KeyConverter().ConvertToString(e.Key);
        if(strKey.Length > 1 )
        {
            strKey = strKey.Replace("NumPad", "").Replace("D", "");
        }
        if (strKey.Length == 1)
        {
            if (!R.IsMatch(strKey))
            {
                e.Handled = true;
            }
        }
        else
        {
            e.Handled = true;
        }
    }
于 2020-08-07T11:38:13.343 回答
-1

你能放一些代码来显示你的意图吗?这不应该为你工作

      if(e.key.ToString().Length==1)

    `Char.IsLetter(e.key.ToString()[0])`
    else

//
于 2013-02-12T14:05:48.747 回答