C# WPF键是数字或数字

C# WPF键是数字或数字,c#,wpf,key,keydown,C#,Wpf,Key,Keydown,我的窗口中有previewKeyDown方法,我想知道按下的键只是A-Z字母或1-0数字(没有任何F1..12,enter,ctrl,alt等-只有字母或数字) 我尝试了Char.isleter,但我需要给出Char,因此e.key.ToString()[0]不起作用,因为几乎每次都是一个字母。类似的操作可以: if ((e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key

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


我尝试了
Char.isleter
,但我需要给出Char,因此
e.key.ToString()[0]
不起作用,因为几乎每次都是一个字母。

类似的操作可以:

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

如果((e.Key>=Key.A&&e.Key=Key.D0&&e.Key=Key.NumPad0&&e.Key你能用一些代码来表达你的意图吗?这对你来说不管用吗

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

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

//

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;

var isNumber=e.Key>=Key.D0&&e.Key=Key.A&&e.Key添加对Microsoft.VisualBasic的引用,并将VB IsNumeric函数与char.isleter()结合使用.

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

var strKey = new KeyConverter().ConvertToString(e.Key);
您仍然需要检查是否有任何修改键被按下(Shift、Ctrl和Alt),还应该注意,这只适用于字母和数字。特殊字符(如逗号、引号等)将显示为与
e.Key.ToString()

尝试一下,它可以工作

    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
    }
private void txbNumber\u KeyDown(对象发送方,KeyEventArgs e)
{

如果(e.Key>=Key.D0&&e.Key=Key.NumPad0&&e.Key有点模糊,但它可以工作:)


你能用一些代码来表达你的意图吗?一个键是一个键,而不是一个字符。这很好,谢谢。现在,另一个问题——关注datagrid——在代码中,我使用了类似这样的东西:if(e.key==key.Down | | key.Up)datagrid.selectedIndex=0;datagrid.focus(),但现在按下上/下键并没有改变datagrid中的索引。@AdamTruszkowski:也许这意味着
e.key==key.down | | e.key==key.up
?在任何情况下,请提出单独的问题,而不是把它们放在注释中。是的,这是e.key==key.down | e.key==key.down,但现在我想在数据网格中向上/向下移动,当向上/向下是pressedOk,我明白了-只要在按下向下键/向上键后更改datagrid+1/-1中的索引&&当selecteditems.count=1KeyDown事件没有捕获箭头键时,请尝试PreviewKeyDown。e.key.tostring()[0]-所以当我按下LeftCtrl时,char是L,这就是它不起作用的原因:)这不包括字母的情况,也不包括非numpad数字(D0-D9)。我可以略读:-)更新到稍微好一点的cludge,尽管其他答案可能更合适。这不确定来自numpad的数字。isNumber应该是(e.Key>=Key.D0&&e.Key=Key.NumPad0&&e.Key
 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;
        }
    }