2011-11-12 107 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; 
} 

希望這會爲你工作。