TextBox只允许输入一定范围的数字,但它不接受某些正确的值。
TextBox只允许输入一定范围的数字,但它不接受某些正确的值。
晚上好,
我正在尝试让WPF文本框只接受3到2813之间的双精度值。
在下面的代码中,我无法输入以1或2开头的任何值,
比如11、22、113、215、2008。
private bool IsValid(string str) { double i; return double.TryParse(str, out i) && i >= 3 && i <= 2813; } private void L_Text_PreviewTextInput(object sender, TextCompositionEventArgs e) { e.Handled = !IsValid(((TextBox)sender).Text + e.Text); }
文本框只允许输入特定范围的数字,但是却无法接受一些正确的值。这个问题出现的原因有两个解决方法。方法一是判断输入的值是否以特定字符开头,然后进行解析。方法二是使用Syncfusion的DoubleTextBox组件。
方法一的解决方法是判断输入的值是否以特定字符开头,然后进行解析。具体实现的代码如下所示:
if (textBoxValue.StartsWith("X"))
{
// 进行解析操作
int parsedValue = int.Parse(textBoxValue.Substring(1));
// 处理解析后的值
}
方法二的解决方法是使用Syncfusion的DoubleTextBox组件。该组件可以限制文本框只能输入特定范围的数字,并且能够接受正确的值。具体使用的代码如下所示:
通过使用上述两种方法,可以解决文本框只允许输入特定范围的数字,但是却无法接受一些正确的值的问题。方法一通过判断特定字符开头并解析的方式,方法二通过使用Syncfusion的DoubleTextBox组件来限制输入范围并接受正确的值。
文本框只允许输入一定范围的数字,但它不接受某些正确的值。这个问题出现的原因是PreviewTextInput事件在用户按下键盘时触发,所以我们无法确定用户此时是想输入"2"还是"22"。为了评估值,我们必须确定用户完成了输入。我们可以使用LostFocus事件来实现这个目的。
在代码中,我们定义了一个IsValid方法,用于验证输入的字符串是否为一个介于3和2813之间的有效数字。在TextBox的LostFocus事件处理程序中,我们将TextBox的文本作为参数传递给IsValid方法进行验证。如果验证不通过,我们将文本设为空字符串。
详细的验证可以参考链接:https://stackoverflow.com/a/37255232/1431001
我尝试了你的代码,但是文本框现在接受小于3和错误的值。实际上,PreviewKeyInput事件不适合用于验证,所以我对答案进行了修改。