2011-11-12 61 views
1

我想创建一个文本框只接受字母和数字,并丢弃所有的特殊字符。我需要这个输入一个有效的文件名,没有扩展名。 我使用下面的代码:SIP:Key.Shift没有检测到

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!"); 
    } 
} 

不幸的是,“按键响应”事件是不存在的,所以我想通了,这是实现我在做什么是最好的方式。

我现在面临的问题是:

正如你可以在上面的代码中看到,我已经采取了“Shift”键按下的照顾,但是当我按下“Shift”键在SIP中, “不允许特殊字符”消息框弹出3次,然后我可以键入大写字母!所以这基本上阻止我输入任何大写字母。

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

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

如何创建仅接受字母,数字和下划线并丢弃所有其他字符的文本框? 此外,“Shift”键未检测到问题吗?

回答

0

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

我会用正则表达式来做到这一点:

using System.Text.RegularExpressions; 

// Add chars which you don't want the user to be able to enter 
private Regex regularExpression = new Regex(@"[email protected]#$%^&*().", 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; 
} 

希望这会为你工作。