SIP:关键.移位没有被检测到

本文关键字:检测 关键 SIP | 更新日期: 2023-09-27 18:14:10

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

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"键时,"不允许特殊字符"消息框弹出3次,然后我才能输入大写字母!!这基本上阻止了我输入任何大写字符。

更糟糕的是,它接受所有字符!@#$%^&*()。可能是因为它检测到这些是0-9之间的数字。看起来对于2和@、3和#等等,返回的键代码是相同的。这是非常奇怪的行为!我甚至不能在上面的技术中使用下划线键。

这种行为在专业的App中显然是不可接受的。

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

SIP:关键.移位没有被检测到

如果我理解你的查询,你想验证你的文本框。

我会使用正则表达式:

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;
}