2011-05-03 85 views
2

當前正在開發一個Windows Phone應用程序,該應用程序使用了bing地圖地理編碼服務。我有一個搜索框,用戶可以在其中鍵入一個位置,然後發送到返回地理座標的bing地圖。WP7的文本框驗證

但是,我遇到了搜索框的問題。當我輸入隨機字母時,沒有找到結果,並且我已經實施了代碼,因此通知用戶沒有找到目的地。問題是,如果因爲什麼原因用戶決定寫一些符號,例如:& $%£「當bing地圖返回一些數據時,這會崩潰應用程序

我該如何去驗證文本框條目,以便它檢查是否有字符串中的所有字符,然後發送這一關的服務,如果有沒有?

任何幫助,非常感謝!

回答

7

最好的選擇是防止用戶輸入無效字符。這可以通過在TextChanged事件中使用正則表達式來完成。你可以選擇寬容或限制模式。

一定要添加必要的using語句:

using System.Text.RegularExpressions; 

許可模型,允許除以外的所有字符已明令禁止:

private Regex rxForbidden = new Regex(@"[&$%£]", RegexOptions.IgnoreCase); 
private void txtInput_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    txtInput.Text = rxForbidden.Replace(txtInput.Text, ""); 
    txtInput.SelectionStart = txtInput.Text.Length; 
} 

限制性模式,你只允許特定的字符:

private Regex rxForbidden = new Regex(@"[^0-9a-z]", RegexOptions.IgnoreCase); 
private void txtInput_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    txtInput.Text = rxForbidden.Replace(txtInput.Text, ""); 
    txtInput.SelectionStart = txtInput.Text.Length; 
} 

一般的限制性模式會更容易維護(你會不會回去繼續增加額外的禁止符號,你會發現它們),但它真的取決於你的應用程序。在任何一種情況下,任何禁用符號的使用都將被完全忽略,就好像用戶沒有按下該鍵一樣。

作爲一個附註,您的textbox應該有它的InputScope設置爲Maps

1

一個更好的方法可能是阻止用戶進入那些無效的字符。一個快速解決方法是在將字符串傳遞給地圖控件之前從字符串中簡單地刪除這些無效字符,如下所示:

txtSearch.Text.Replace("&", "").Replace("$", "").Replace("%", "").Replace("£", ""); 

但是從長遠來看,直接在文本框控件上直接篩選出無效字符會更容易。