2012-08-07 54 views
2

在我的Windows phone7(silverlight)應用程序中,我必須限制爲文本框插入符號。基本上我需要只有允許插入字母數字字符。Windows phone7:限制插入文本框的某些鍵

因此,作爲第一步驟I中添加

InputScope="AlphanumericHalfWidth"然後InputScope="AlphanumericFullWidth"

但在這兩種情況下,鍵盤顯示並允許輸入以下字符等等。 @ # $ % & % () !

所以我只是執行下面的邏輯在文本框中KeyDown事件

if (!((e.PlatformKeyCode >= 48 && e.PlatformKeyCode <= 57) || (e.PlatformKeyCode >= 65 && e.PlatformKeyCode <= 90) || (e.PlatformKeyCode >= 97 && e.PlatformKeyCode <= 122))) 
    { 
     e.Handled = true; 
    } 

但事實是它仍然允許進入下列字符的文本框中。 @ # $ % & % () !

無法弄清楚我究竟該如何實現這一目標。如果有人可以引導我限制文本框中除字母數字之外的其他所有字符,那麼真的很感激。謝謝....

回答

1

這是因爲PlatformKeyCode不是您正在嘗試處理的ASCII值。

使用TextChanged事件處理程序:

private void bla_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    bla.Text = Regex.Replace(bla.Text, @"[^\w\s]", string.Empty); 
} 

其中BLA是文本框中的名稱。

+0

非常感謝igrali。是的,這對我有用......但有一點我不清楚。你知道「KeyDown」事件中的「e.PlatformKeyCode」究竟傳遞了什麼。正如你所說,它不完全返回相應的ASCII值。 – JibW 2012-08-07 16:28:07

+0

我不太確定,但您可以在此處找到更多詳細信息:http://msdn.microsoft.com/en-us/library/system.windows.input.keyeventargs.platformkeycode%28v=vs.95%29.aspx – 2012-08-07 17:56:18

1

你可以做一個正則表達式檢查,以驗證(比目前的做法有點清潔劑)這一點,你必須忽略最後一個字符,即從文本在文本中刪除

+0

嗨AD .Net。我也使用RegEx進行測試。事情是「e.PlatformKeyCode」爲'2'和'@'返回50。像這樣的'3'和'#'等51,所以沒有辦法確定它是3或#用戶輸入...這就是問題 – JibW 2012-08-07 16:11:11