Windows 8 - TextBox只接受数字的文本框出现问题
问题的原因是代码中的逻辑错误,导致在输入非数字字符时会立即删除该字符。解决方法是在判断输入是否为数字之后,重新设置文本框的内容和光标位置。
具体解决方法如下:
1. 在文本框的TextChanged事件处理方法中,添加以下代码:
private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e) { var textBox = sender as TextBox; if (textBox == null) return; if (textBox.Text.Length == 0) return; var text = textBox.Text; int result; var isValid = int.TryParse(text, out result); if (isValid) return; var selectionStart = textBox.SelectionStart; var resultString = new string(text.Where(char.IsDigit).ToArray()); var lengthDiff = textBox.Text.Length - resultString.Length; textBox.Text = resultString; textBox.SelectionStart = selectionStart - lengthDiff; }
通过以上代码,可以实现在文本框中只接受数字输入的功能,并且能够正确处理输入非数字字符的情况。
在Windows 8中,有一个问题是文本框只能接受数字,但是在按下键或松开键的事件处理中,没有一种可靠的方法来处理这个问题,因为奇怪的是,shift 4键(即$符号)返回的是4而不是键值。
最好的解决方法是,在使用值之前捕获它并检查它是否为数字,然后提醒用户。
var IsNumeric = new System.Text.RegularExpressions.Regex("^[0-9]*$"); if (!IsNumeric.IsMatch(edtPort.Text)) { showMessage("Port number must be number", "Input Error"); return; }
这种方法并不完美,但比教用户美元符号现在是一个数字要好。
问题的原因是在Windows 8中,使用Char.IsDigit
的方法可以限制TextBox只接受数字输入,但是在复制粘贴时无法起作用。此外,在网站的相关问题中还提到了如何创建一个仅接受数字输入的WPF TextBox。
解决方法是使用Char.IsDigit
方法限制只接受数字输入,并在复制粘贴时进行处理。另外,还可以使用Char.IsLetter
方法限制只接受字母输入,但是这种方法会忽略数字键盘的输入。
以下是解决问题的代码示例:
// 限制只接受数字输入 e.Handled = !Char.IsDigit(c); // 限制只接受字母输入 e.Handled = Char.IsLetter(c);
希望以上内容对解决Windows 8中TextBox只接受数字输入的问题有所帮助。