C# 确定事件键是否为文本(不仅仅是字母数字)

C# 确定事件键是否为文本(不仅仅是字母数字),c#,wpf,keyboard-events,C#,Wpf,Keyboard Events,我有一个文本框,其中包含一个事件,当输入一些文本时,该事件应该会执行一些操作。很容易检查它是否为字母数字,如下所述: if(((e.KeyCode>=Keys.A&&e.KeyCode=Keys.D0&&e.KeyCode=Keys.NumPad0&&e.KeyCode由于不建议使用其他选项,因此我使用以下代码来允许几乎所有的文本击键。不幸的是,这取决于键盘,因此它不是很优雅。希望这不是应用程序中的关键方面,这只是可用性问题 bool isText = (e.Key >= Key.A &a

我有一个文本框,其中包含一个事件,当输入一些文本时,该事件应该会执行一些操作。很容易检查它是否为字母数字,如下所述:


if(((e.KeyCode>=Keys.A&&e.KeyCode=Keys.D0&&e.KeyCode=Keys.NumPad0&&e.KeyCode由于不建议使用其他选项,因此我使用以下代码来允许几乎所有的文本击键。不幸的是,这取决于键盘,因此它不是很优雅。希望这不是应用程序中的关键方面,这只是可用性问题

bool isText = (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.OemQuestion || e.Key == Key.OemQuotes || e.Key == Key.OemPlus || e.Key == Key.OemOpenBrackets || e.Key == Key.OemCloseBrackets || e.Key == Key.OemMinus
             || e.Key == Key.DeadCharProcessed || e.Key == Key.Oem1 || e.Key == Key.Oem7 || e.Key == Key.OemPeriod || e.Key == Key.OemComma || e.Key == Key.OemMinus
              || e.Key == Key.Add || e.Key == Key.Divide || e.Key == Key.Multiply || e.Key == Key.Subtract || e.Key == Key.Oem102 || e.Key == Key.Decimal;

bool-isText=(e.Key>=Key.A&&e.Key=Key.D0&&e.Key=Key.NumPad0&&e.Key此代码只允许数字和“.”:

    private void txtJustNumber_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsDigit((char)(e.KeyChar)) &&
            e.KeyChar != ((char)(Keys.Enter)) &&
            e.KeyChar != (char)(Keys.Delete) &&
            e.KeyChar != (char)(Keys.Back))             
        {
            e.Handled = true;
        }
    }

你真的想排除所有没有键的字符吗?例如,我的键盘没有
eu
键,但可以说它仍然是文本。这是一个好问题,因为我应该能够使用,例如,ñ来触发此事件。我希望我应该检查此字符是否可打印或类似。我想排除Ins,箭头、F、Enter、Tab等。对照正则表达式检查文本可能是一种解决方案?正则表达式
\p{C}
匹配不可见的控制字符和未使用的代码点。这些字符是否映射到键是不相关的。只是为了澄清一下,当我按下时?我得到e。键等于key.OemQuestion,我无法从中得到?。
    private void txtJustNumber_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsDigit((char)(e.KeyChar)) &&
            e.KeyChar != ((char)(Keys.Enter)) &&
            e.KeyChar != (char)(Keys.Delete) &&
            e.KeyChar != (char)(Keys.Back))             
        {
            e.Handled = true;
        }
    }