检查在Visual Basic中的文本框中输入的数值

时间:2014-02-19 23:27:10

标签: vb.net isnumeric

我正在为我的Visual Basic类编写一个程序并且有一个简单的问题。我们鼓励做的一件事是检查以确保在文本框中输入的数量实际上是一个数字。我们的教授建议使用IsNumeric来执行此检查,但我遇到了一些麻烦。在将其添加到指令之前,我已经编写了很多代码,因此不确定如何将其集成到我已有的代码中。

该程序的主要目的是允许用户将成分从一个列表框添加到配方列表框,在文本框中输入每个选定成分的数量,并计算配方的总卡路里。我现在编写代码的方式,IsNumeric是一个嵌套if语句的一部分,我将开始将所选成分添加到配方列表框中。我不确定这是否适合它。

这是我到目前为止编写的代码。

Public Class Form1

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        Dim i As Integer = lstIngredients.SelectedIndex
        Dim Quantity As Double
        Dim intCount As Integer = 0

        If Trim(txtQuantity.Text = "") Then
            Quantity = 1
        Else
            Quantity = Me.txtQuantity.Text
        End If

        If txtQuantity.Text Is IsNumeric() Then
            If intCount < Quantity Then
                lstRecipe.Items.Add(Quantity & " " & lstIngredients.Text)
                intCount += 1
            End If
        Else
            MessageBox.Show("The quantity entered is not numeric. Please add a numeric    quantity.")
        End If


    End Sub

    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
        lstRecipe.Items.Clear()
        txtQuantity.Clear()
        txtAnswer.Clear()
    End Sub

    Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click


    End Sub
End Class

此外,这是我在尝试运行此程序时收到的错误。

Error   1   Argument not specified for parameter 'Expression' of 'Public   Function IsNumeric(Expression As Object) As Boolean'.    

任何建议都将不胜感激。

6 个答案:

答案 0 :(得分:14)

更正确的方法是使用TryParseInt32类中提供的Double方法

If Double.TryParse(txtQuantity.Text, Quantity) Then
     If intCount < Quantity Then
         lstRecipe.Items.Add(Quantity & " " & lstIngredients.Text)
          intCount += 1
     End If
 Else
     MessageBox.Show("The quantity entered is not numeric. Please add a numeric    quantity.")
 End If

您还可以删除测试空文本框的代码。

TryParse方法需要两个参数,第一个是可以转换的字符串,第二个参数是在可能的情况下接收转换结果的变量。如果无法执行转换,则函数返回false。

有很多理由喜欢Double.TryParse而不是IsNumeric

第一个原因是,使用TryParse时,您还会获得转化结果,而IsNumeric则需要在检查后进行转化。

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

答案 1 :(得分:5)

您只是错误地使用了该功能 - 您需要将该字符串作为参数传递。

If IsNumeric(txtQuantity.Text) Then

答案 2 :(得分:1)

如果您定义了该方法,请使用IsNumeric(txtQuantity.Text)。否则使用Int32.TryParse()方法。如果传入的文本是数字,它将返回true。

答案 3 :(得分:1)

使用Regex.IsMatch

Public Function isNumeric(input As String) As Boolean
    Return Regex.IsMatch(input.Trim, "\A-{0,1}[0-9.]*\Z")
End Function

答案 4 :(得分:0)

Private Sub txbDwellTime_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txbDwellTime.KeyPress

    numDecOnly(e)

End Sub


Public Sub numDecOnly(ByVal e As System.Windows.Forms.KeyPressEventArgs)
    If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57 Or Asc(e.KeyChar) = 46) Then
        'good job do nothing we only allow positive Decimal numbers in this field
        'Asc(e.KeyChar) 48 Through 57 i.e. 0 through 9 Or Asc(e.KeyChar) 46 (dot= .)
    Else
        e.Handled = True
        MsgBox("Only Positive Decimal Numbers Allowed this field")
    End If

End Sub

答案 5 :(得分:0)

是, Double.Tryparse 是此问题的最佳答案,但是要节省您的编码时间并确保输入的值始终是数字,请使用 NumericDropdown控件 而不是普通的文本框,这样您可以确保输入的值始终是数字,并节省了检查输入值的时间,因为该控件将只接受数字值,而不接受任何东西。

enter image description here