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.
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.
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
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.
Utilisez Regex.IsMatch :
Public Function isNumeric(input As String) As Boolean
Return Regex.IsMatch(input.Trim, "\A-{0,1}[0-9.]*\Z")
End Function