我已经对此做了一些研究,仍然无法让我的程序运行起来。我只需要检查文本框以查看用户输入是否是数值(“。”和“/”除外)
我的代码到目前为止,
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
答案 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,您只能传递一个字符串作为其第一个参数。