TextBox 只允许输入特定范围的数字,但不接受某些正确的值

TextBox only allow enter certain range of numbers, but its not accept some correct value

晚上好,

试图使 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);
}

您可以做 2 件事

  1. 您可以评估它是否以特定字符开头,然后解析该字符
  2. 您可以使用 https://help.syncfusion.com/wpf/double-textbox/getting-started

PreviewTextInput 在用户按下某个键时发生。所以我们无法知道此时用户是打算写“2”还是“22”。 要评估该值,我们必须确保用户已完成写入。为此,您可以使用 LostFocus 事件。

private bool IsValid(string str)
{
    double i;         
    return double.TryParse(str, out i) && i >= 3 && i <= 2813;
}
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    var txt = sender as TextBox;
    if (!IsValid((txt.Text)))
    {
        //invalid delete text
        txt.Text = "";
    }
} 

详细验证: