检查文本框输入是否为数字

时间:2013-03-15 01:19:37

标签: vb.net validation text numeric

我已经对此做了一些研究,仍然无法让我的程序运行起来。我只需要检查文本框以查看用户输入是否是数值(“。”和“/”除外)

我的代码到目前为止,

 Private Sub Num1_KeyPress(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Num1.KeyPress
    Dim UserEntry As Boolean
    If UserEntry = IsNumeric(False) Then
        MessageBox.Show("That's not numeric!")
    End If
End Sub

7 个答案:

答案 0 :(得分:7)

我建议处理TextChanged并检查整个数字而不是单个字符。

Private Sub Num1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles Num1.TextChanged
        If IsInputNumeric(Num1.Text) Then
            'handle numeric input
        Else
            'handle not a number
        End If
    End Sub

    Private Function IsInputNumeric(input As String) As Boolean
        If String.IsNullOrWhiteSpace(input) Then Return False
        If IsNumeric(input) Then Return True
        Dim parts() As String = input.Split("/"c)
        If parts.Length <> 2 Then Return False
        Return IsNumeric(parts(0)) AndAlso IsNumeric(parts(1))
    End Function

答案 1 :(得分:3)

我认为您最好使用TextBox.KeyUp事件,它会传递KeyEventArgs。试试这个:

Private Sub Num1_KeyUp(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles Num1.KeyUp

    Dim isDigit As Boolean = Char.IsDigit(ChrW(e.KeyValue))
    Dim isKeypadNum As Boolean = e.KeyCode >= Keys.NumPad0 And e.KeyCode <= Keys.NumPad9
    Dim isBackOrSlashOrPeriod As Boolean = (e.KeyCode = Keys.Decimal Or e.KeyCode = Keys.Oem2 Or e.KeyCode = Keys.Back Or e.KeyCode = Keys.OemPeriod)

    If Not (isDigit Or isKeypadNum Or isBackOrSlashOrPeriod) Then
        MessageBox.Show("That's not numeric!")
    End If

End Sub

答案 2 :(得分:0)

Public Function onlyNumbers(ByVal KeyChar As Char) As Boolean
    Dim allowedChars As String

    allowedChars = "0123456789./" 

    If allowedChars.IndexOf(KeyChar) = -1 And (Asc(KeyChar)) <> 8 Then 
        Return True
    End If

    Return False
End Function

true表示无效的char。

在按键上你需要做:

e.handled = onlyNumbers(e.keychar)

答案 3 :(得分:0)

我发现这种验证在textBox的LostFocus eventHandler或表单级别更容易实现,例如:当用户单击“确定”按钮时。

然后您可以按照以下方式进行验证

a)文本框是否包含"0123456789./"以外的任何字符。如果是,则为非数字

b)在出现"/"字符的任何地方(如果有)拆分文本,然后在每个子字符串上使用IsNumeric()函数。如果它们中的任何一个不是数字,则文本不是数字。

这确实假设您允许1/2 / 2,.i.e。 1/4。如果没有,那么你还必须检查字符串中是否有最多1“/”字符。

答案 4 :(得分:0)

Private Sub tbYear_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbYear.KeyPress
    If e.KeyChar < Chr(48) Or e.KeyChar > Chr(57) Then
        e.KeyChar = Nothing
    End If
End Sub

答案 5 :(得分:0)

' Validates textboxes for numeric only keystrokes.  Hook this up to the 
' PreviewTextInput of the desired textbox
Private Sub SetTextboxNumericOnly(sender As Object,
                                  e As TextCompositionEventArgs)

    Dim regex As New System.Text.RegularExpressions.Regex("[^0-9]+")
    e.Handled = regex.IsMatch(e.Text)

End Sub

请记住,您仍需要检查文本框是否包含值,以防它们删除文本框的内容。此例程确保它始终为数字,因此不再需要检查。

答案 6 :(得分:0)

根据问题checking for numeric value entered in text box in visual basic的最佳答案,略有切线,还有方法.TryParse被认为是比IsNumeric更好的解决方案:

  

第一个原因是,使用TryParse还可以获得转换结果,而使用IsNumeric时,您必须在检查后进行转换。

     

第二个原因是你可以向IsNumeric提供你想要的任何对象(例如也是一个Button)并接受它。你永远不会在编译时发现这种错误。相反,使用TryParse,您只能传递一个字符串作为其第一个参数。