我正在尝试验证数字是否为Visual Basic中的小数。 msgBox显示的数字有效时得到的结果。当它无效时,我没有收到msgBox,程序崩溃时出现错误信息,该号码必须小于无穷大。
我尝试添加另一个If Not IsNumeric(txt1.text)然后 - 但收到了相同的结果。
我哪里出错?
If IsNumeric(txt1.text) Then
msgBox("good")
Else
msgBox("not good")
End If
答案 0 :(得分:4)
尝试使用Double.TryParse或Decimal.TryParse代替IsNumeric。
Dim result as Double = 0.0
if Double.TryParse(txt1.text, result) then
' valid entry
else
' invalid entry
end if
答案 1 :(得分:1)
我只需编写一个函数,将文本框的输入限制为有效的十进制值,我想出了以下内容:
Private Sub validateDecimalTextBox(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) handles myTextBox.keyPress
Dim textBox As TextBox = DirectCast(sender, TextBox)
If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or (e.KeyChar = "." And textBox.Text.IndexOf(".") < 0) Or (e.KeyChar = "-" And textBox.Text.Length = 0)) Then
e.Handled = True
End If
End Sub
这应该将用户输入限制为十进制值,同时允许负值。
如果您限制用户输入,那么当您从文本框中获取值时,您可以更有信心它是有效的。
此解决方案尚未完成,因为它允许用户在文本框中输入“ - ”,这可能(可能)不是您的有效输入。因此,您可以使用其他人提到的解决方案,并以合理的方式使用以下任何一种方法。
double.parse,
double.tryparse
isNumeric()
我个人的偏好是isNumeric(),但选择权取决于你。
答案 2 :(得分:0)
您可以忽略文本框的按键事件中的字符,例如:
Private Sub txtValue_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValue.KeyPress
If Not Char.IsDigit(e.KeyChar) Then
If Not (e.KeyChar = vbBack) Then
e.Handled = True
End If
End If
End Sub
不确定您正在使用哪个版本的VB,假设它是.NET
答案 3 :(得分:0)
您还可以使用Textbox Keypress事件。即
Private Sub Textbox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Textbox1.KeyPress
If (e.KeyChar < "0" Or e.KeyChar > "9") And e.KeyChar <> "." And e.KeyChar <> ControlChars.Back Then
e.Handled = True
Else
If e.KeyChar = "." Then
If Textbox1.Text.Contains(".") Then
Beep()
e.Handled = True
End If
End If
End If
End Sub
我希望这会有所帮助。