我正在尝试创建一个只接受字母和数字的文本框,并丢弃所有特殊字符。我需要这个来输入有效的文件名,没有扩展名。 我使用以下代码:
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”键未被检测到的问题?
答案 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;
}
希望这对你有用。