web-dev-qa-db-fra.com

Vérification de la valeur numérique entrée dans la zone de texte dans Visual Basic

Je travaille sur un programme pour ma classe de Visual Basic et j'ai une question rapide. Une des choses que nous avons été encouragés à faire était de vérifier que la quantité entrée dans une zone de texte est bien un nombre. Notre professeur a suggéré d'utiliser IsNumeric pour effectuer cette vérification, mais j'ai quelques problèmes. J'avais déjà une bonne partie du code écrit avant qu'il ajoute cela aux instructions, donc je ne sais pas comment l'intégrer au code que j'ai déjà. 

L'objectif principal du programme est de permettre à l'utilisateur d'ajouter des ingrédients d'une zone de liste à la liste de recettes, de saisir une quantité pour chaque ingrédient sélectionné dans une zone de texte et de calculer le nombre total de calories de la recette. De la manière dont le code est écrit maintenant, IsNumeric fait partie d'une instruction if imbriquée au début de l'endroit où je vais commencer à ajouter les ingrédients sélectionnés à la liste des recettes. Je ne sais pas si c'est le bon endroit pour cela cependant.

Voici le code que j'ai écrit jusqu'à présent.

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

En outre, voici l'erreur que je reçois lorsque j'essaie d'exécuter ce programme tel qu'il est écrit. 

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

Toutes les suggestions seraient grandement appréciées. 

5
Beth Tanner

Une méthode plus correcte consiste à utiliser la méthode TryParse disponible dans la classe Int32 ou 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

Et vous pouvez également supprimer le code qui teste la zone de texte vide.

La méthode TryParse requiert deux paramètres, le premier est la chaîne pouvant être convertie, le second paramètre est la variable qui reçoit le résultat de la conversion si cela est possible. Si la conversion ne peut pas être exécutée, la fonction renvoie false.

Il existe de nombreuses raisons de préférer Double.TryParse au lieu de IsNumeric.

La première raison est qu'avec TryParse, vous obtenez également le résultat de la conversion, alors qu'avec IsNumeric, vous devrez effectuer la conversion après le contrôle.

La deuxième raison est que vous pouvez donner à IsNumeric n'importe quel objet que vous voulez (aussi un bouton par exemple) et il l'accepte. Vous ne découvrirez jamais ce genre d'erreur au moment de la compilation. Avec TryParse, vous pouvez uniquement transmettre une chaîne en tant que premier paramètre.

14
Steve

Vous utilisez simplement la fonction de manière incorrecte - vous devez passer la chaîne en tant que paramètre.

If IsNumeric(txtQuantity.Text) Then
5
bd33

Utilisez IsNumeric(txtQuantity.Text) si cette méthode est définie. Sinon, utilisez la méthode Int32.TryParse(). Il retournera true si le texte transmis est un nombre.

1
Ananthan Unni

Utilisez 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