【问题标题】:Checking for numeric value entered in text box in Visual Basic在 Visual Basic 的文本框中检查输入的数值
【发布时间】:2014-03-20 15:09:08
【问题描述】:

我正在为我的 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'.    

任何建议将不胜感激。

【问题讨论】:

标签: vb.net isnumeric


【解决方案1】:

更正确的方法是使用Int32Double 类中提供的TryParse 方法

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,您只能传递一个字符串作为其第一个参数。

【讨论】:

  • 这是首选方法(使用 .Parse 或 .TryParse),因为 IsNumeric 是一种 VB 保留方法,并非全部。它可以测试数字格式,但不能确保该值是完全数字的。例如,IsNumeric("$123") 返回 true,但如果您尝试将 "$123" 分配给数字变量,这显然会导致异常...如果没有 Parse 方法,您必须逐个字符地检查。如果您需要提供更好的反馈,例如检查密码的复杂性,这可能是首选,但对于基本的数字转换来说,它是多余的。
  • @ps2goat 我绝对同意。
  • +1 以获得最佳解决方案,不要像其他答案那样使用 VB6 旧方法。
【解决方案2】:

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

If IsNumeric(txtQuantity.Text) Then

【讨论】:

    【解决方案3】:

    使用Regex.IsMatch:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:
          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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多