使用VB.NET验证Keypress

时间:2014-07-15 01:39:34

标签: vb.net vb.net-2010

此代码位于Keypress事件

当我尝试输入-1,-2或1.1 -1.3时没有问题,但是当我尝试在文本框中输入1/2和1/4时,我只存储了这个“1 /”。 我认为我的代码有问题,但根本没有错误信息,我无法弄清楚。 。 任何形式的帮助和建议都非常感谢。 。

    Dim tb As TextBox = CType(sender, TextBox)  
    Dim chr As Char = e.KeyChar  

    If IsNumeric(e.KeyChar) And Not e.KeyChar = "-" Then  
        e.Handled = Not IsNumeric(tb.Text & e.KeyChar)  
    ElseIf IsNumeric(e.KeyChar) And Not e.KeyChar = "/" Then  
        e.Handled = Not IsNumeric(tb.Text & e.KeyChar)  
    ElseIf e.KeyChar = "." Then  
        If Not (tb.SelectedText = "." Or IsNumeric(tb.Text & e.KeyChar)) Then  
            e.Handled = True  
        End If  
    ElseIf e.KeyChar = "/" Then  
        If tb.SelectionStart <> 1 Or Microsoft.VisualBasic.Left(tb.Text, 1) = "/" Then  
            e.Handled = True  
        End If  
    ElseIf e.KeyChar = "-" Then  
        If tb.SelectionStart <> 0 Or Microsoft.VisualBasic.Left(tb.Text, 1) = "-" Then  
            e.Handled = True  
        End If  
    ElseIf Not Char.IsControl(e.KeyChar) Then  
        e.Handled = True  
    End If  

2 个答案:

答案 0 :(得分:1)

您遇到第一个条件本身的问题,您检查的是由于“/”符号而返回false的isnumeric。

  Dim tb As TextBox = CType(sender, TextBox)
        Dim chr As Char = e.KeyChar

        If IsNumeric(e.KeyChar) And Not e.KeyChar = "-" Then
            If tb.Text.Contains("/") = False Then
                e.Handled = Not IsNumeric(tb.Text & e.KeyChar)
            End If

        ElseIf IsNumeric(e.KeyChar) And Not e.KeyChar = "/" Then
            e.Handled = Not IsNumeric(tb.Text & e.KeyChar)
        ElseIf e.KeyChar = "." Then
            If Not (tb.SelectedText = "." Or IsNumeric(tb.Text & e.KeyChar)) Then
                e.Handled = True
            End If
        ElseIf e.KeyChar = "/" Then
            If tb.SelectionStart <> 1 Or Microsoft.VisualBasic.Left(tb.Text, 1) = "/" Then
                e.Handled = True
            End If
        ElseIf e.KeyChar = "-" Then
            If tb.SelectionStart <> 0 Or Microsoft.VisualBasic.Left(tb.Text, 1) = "-" Then
                e.Handled = True
            End If
        ElseIf Not Char.IsControl(e.KeyChar) Then
            e.Handled = True
        End If

答案 1 :(得分:0)

我认为你可以通过测试整个值是否为数字而不是测试每个字符来避免这个错误和很多复杂性。例如:

If IsNumeric(tb.Text) Then
   e.Handled = true
End If

有什么理由你不能这样做吗?