1

我已经对此进行了一些研究,但仍然无法让我的程序正常工作。我只需要检查文本框以查看用户输入是否为数值(“。”和或“/”除外)

到目前为止我的代码,

 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
4

7 回答 7

8

我建议处理 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
于 2013-03-15T02:29:08.343 回答
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
于 2013-03-15T01:31:16.320 回答
0

我发现这种验证在文本框的LostFocus事件处理程序中或在表单级别(例如,当用户单击确定按钮时)更容易进行。

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

a)文本框是否包含任何字符,"0123456789./"如果是,那么非数字

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

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

于 2013-03-15T02:28:24.223 回答
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 表示无效字符。

在按键上,您需要执行以下操作:

e.handled = onlyNumbers(e.keychar)
于 2013-03-15T01:47:05.697 回答
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
于 2015-01-27T19:25:42.547 回答
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

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

于 2015-05-16T00:26:56.427 回答
0

稍稍切线,根据对在visual basic中检查文本框中输入的数值的问题的最佳答案,还有方法.TryParse被认为是比 IsNumeric 更好的解决方案:

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

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

于 2016-06-23T18:08:15.520 回答