說實話重來沒想到驗證輸入是如此的苦逼的一件事情。
網上好多驗證都是在輸入完成后再驗證,我的想法是在輸入的時候就限制輸入,這樣我就不用再寫代碼來驗證了
應為是手機端,所以不用判斷其他非法字符,直接把Textbox的屬性InputScope設置為"Number"就是了,反正在目前版本的UWP中純數字鍵盤還無法切換到其他的字符鍵盤去
下面的代碼是一個金額文本框的驗證,算是拋磚引玉吧。歡迎還有更好的方案指點!
直接上代碼:
/// <summary> /// 檢查輸入金額,當檢測到小數掉后只能輸入2位小數 /// 當充滿12個字符后只能修改小數的值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void valueTextBox_TextChanged(object sender, TextChangedEventArgs e) { //如果不為空 if (valueTextBox.Text != string.Empty) { if (valueTextBox.Text.Contains('.')) { if (valueTextBox.Text.Count() == 10) { valueTextBox.MaxLength = valueTextBox.Text.IndexOf('.') + 3; } else { valueTextBox.MaxLength = valueTextBox.Text.IndexOf('.') + 3; } } else { //當整數達到9位后自動補全小數位,並移動光標到最后一位 if (valueTextBox.Text.Count() == 9) { //valueTextBox.Text += ".00"; valueTextBox.MaxLength = 9; valueTextBox.SelectionStart = valueTextBox.Text.Length; } } } else { //為空就重置金額輸入框的最大字符數為12 valueTextBox.MaxLength = 12; } } /// <summary> /// 當整數位為9位且當前輸入的是小數點時,設置textbox最大字符數為12,移動光標到最后位置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void valueTextBox_KeyDown(object sender, KeyRoutedEventArgs e) { //不知道為什么和默認的小數點的代碼不一樣,默認為110 if (e.Key.ToString() == "190") { if (valueTextBox.Text.Count() == 9) { valueTextBox.MaxLength = 12; valueTextBox.SelectionStart = valueTextBox.Text.Length; } } }
太晚了下次再補GIF上來

