私のVisual Basicクラスのプログラムに取り組んでいますが、簡単な質問があります。テキストボックスに入力された数量が実際に数値であることを確認することをお勧めしました。私たちの教授は、IsNumericを使用してこのチェックを実行することを提案しましたが、問題が発生しています。彼が指示にこれを追加する前に、私はすでにかなりのコードを書いていたので、これを私がすでに持っているコードにどのように統合するかはわかりません。
プログラムの主な目的は、ユーザーが1つのリストボックスからレシピリストボックスに材料を追加し、テキストボックスに選択した各材料の量を入力し、レシピの総カロリーを計算できるようにすることです。今コードを書いているように、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'.
任意の提案をいただければ幸いです。
そのためのより正しい方法は、Int32
またはTryParse
クラスで使用可能な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
メソッドには2つのパラメーターが必要です。最初のパラメーターは変換可能な文字列、2番目のパラメーターは可能であれば変換結果を受け取る変数です。変換を実行できない場合、関数はfalseを返します。
IsNumeric
ではなく Double.TryParse を選択する理由は数多くあります。
最初の理由は、TryParse
を使用すると変換の結果も得られるのに対し、IsNumeric
を使用すると、チェック後に変換を実行する必要があるためです。
2番目の理由は、IsNumeric
に任意のオブジェクト(たとえば、ボタン)を与えることができ、それを受け入れるためです。コンパイル時にこの種のエラーを発見することはありません。代わりに、TryParse
を使用すると、最初のパラメーターとして文字列のみを渡すことができます。
関数を正しく使用していない-文字列をパラメータとして渡す必要がある。
If IsNumeric(txtQuantity.Text) Then
そのメソッドが定義されている場合は、IsNumeric(txtQuantity.Text)
を使用します。それ以外の場合は、Int32.TryParse()
メソッドを使用します。渡されたテキストが数値の場合、trueを返します。
Regex.IsMatch を使用:
Public Function isNumeric(input As String) As Boolean
Return Regex.IsMatch(input.Trim, "\A-{0,1}[0-9.]*\Z")
End Function