我正在为我的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'.
任何建议都将不胜感激。
答案 0 :(得分:14)
更正确的方法是使用TryParse
或Int32
类中提供的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)
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)