SIP:Key.Shift未被检测到

时间:2011-11-12 08:33:40

标签: c# windows-phone-7

我正在尝试创建一个只接受字母和数字的文本框,并丢弃所有特殊字符。我需要这个来输入有效的文件名,没有扩展名。 我使用以下代码:

private void txtFName_KeyDown(object sender, KeyEventArgs e)
{
    if (!(((e.Key >= Key.A) && (e.Key <= Key.Z)) || ((e.Key >= Key.D0) && (e.Key <= Key.D9)) || (e.Key == Key.Shift) || (e.Key == Key.Back)))
    {
        e.Handled = true;
        MessageBox.Show("No Special Characters are Allowed!");
    }
}

不幸的是,“KeyPress”事件不存在,所以我发现这是实现我正在做的事情的最佳方式。

我面临的问题是:

正如您在上面的代码中看到的那样,我按下了“Shift”键,但是当我按下SIP上的“Shift”键时,弹出“No Special Characters are Allowed”消息框3我可以键入一个大写字母!所以这实际上阻止我输入任何大写字符。

更糟糕的是,它接受了所有角色!@#$%^&amp; *()。可能是因为它将这些检测为0-9的数字。看起来关键代码的返回值相同,分别为2和@,3和#等等。这是非常奇怪的行为!我甚至无法使用上述技术的下划线键。

在专业应用程序中,这种行为显然是不可接受的。

如何创建一个只接受字母,数字和下划线的文本框,并丢弃所有其他字符? 此外,是否存在“Shift”键未被检测到的问题?

1 个答案:

答案 0 :(得分:0)

如果我了解您的查询,则需要验证文本框。

我会使用正则表达式来执行此操作:

using System.Text.RegularExpressions;

// Add chars which you don't want the user to be able to enter
private Regex regularExpression = new Regex(@"!@#$%^&*().", RegexOptions.IgnoreCase);

// Your text changed event handler
private void txtInput_TextChanged(object sender, TextChangedEventArgs e)
{
    // Replace the forbidden char with ""
    txtInput.Text = regularExpression.Replace(txtInput.Text, "");
    txtInput.SelectionStart = txtInput.Text.Length;
}

希望这对你有用。