web-dev-qa-db-ja.com

Visual Basicのテキストボックスに入力された数値を確認する

私の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'.    

任意の提案をいただければ幸いです。

5
Beth Tanner

そのためのより正しい方法は、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を使用すると、最初のパラメーターとして文字列のみを渡すことができます。

16
Steve

関数を正しく使用していない-文字列をパラメータとして渡す必要がある。

If IsNumeric(txtQuantity.Text) Then
5
bd33

そのメソッドが定義されている場合は、IsNumeric(txtQuantity.Text)を使用します。それ以外の場合は、Int32.TryParse()メソッドを使用します。渡されたテキストが数値の場合、trueを返します。

1
Ananthan Unni

Regex.IsMatch を使用:

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