在文本框中验证十进制

时间:2010-11-02 15:48:52

标签: vb.net

我正在尝试验证数字是否为Visual Basic中的小数。 msgBox显示的数字有效时得到的结果。当它无效时,我没有收到msgBox,程序崩溃时出现错误信息,该号码必须小于无穷大。

我尝试添加另一个If Not IsNumeric(txt1.text)然后 - 但收到了相同的结果。

我哪里出错?

If IsNumeric(txt1.text) Then
  msgBox("good")
Else
  msgBox("not good")
End If

4 个答案:

答案 0 :(得分:4)

尝试使用Double.TryParseDecimal.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

我希望这会有所帮助。