1
votes

Comment conditionner une zone de texte pour une chaîne si elle contient un entier

Je rencontre actuellement des problèmes avec la vérification des erreurs dans une zone de texte. Il contient une variable (appelée Price) comme Double. Son but est de saisir un nombre, et lorsqu'un bouton est cliqué, il l'ajoute à un total cumulé affiché dans une zone de texte différente.

Maintenant, j'ai une erreur en vérifiant si la zone de texte est vide en utilisant:

< pre> XXX

Cependant, je ne sais pas comment vérifier si une chaîne ou un caractère autre qu'un nombre a été entré. Toutes les idées sont appréciées.


1 commentaires

3 Réponses :


1
votes

Si la valeur doit être un double valide, vous pouvez utiliser 'double.TryParse'. Quelque chose comme:

if (double.TryParse(txtAddItem.Text, out double price) == false)
{
  // Show error or clear textbox
}
else
{
  // Value is valid, add to total
}


1 commentaires

S'il vous plaît, ! au lieu de == false c'est-à-dire if (! Double.TryParse ...)



1
votes

Vous pouvez utiliser Double.TryParse ()

double number;
if (Double.TryParse(txtAddItem.Text, out number)) {
    Console.WriteLine("'{0}' is a valid double: {1}", value, number);
} else {
    Console.WriteLine("Unable to parse '{0}' as a valid double", value);
} 


0 commentaires

3
votes

Méthode 1: RegEx

Vous devriez essayer d'utiliser une expression régulière. Les expressions régulières (Regex en bref) sont utilisées pour faire correspondre des chaînes avec des modèles. Par exemple, si vous ne voulez autoriser que les entiers:

double x;
if (double.TryParse(TextBox1.Text, out x)) {
    runningSum += x;
} else {
    //handle if it is not a number in the TextBox.
}

Le Regex classe a une classe .IsMatch (chaîne s) code > méthode, où s est la chaîne que vous voulez tester par rapport au modèle.

Méthode 2: try-catch et Parse () strong >

Une autre façon de le faire, qui pourrait être un peu plus conviviale pour les débutants, est un bloc try-catch. ( Je suppose que le nom de votre TextBox est TextBox1 et que vous stockez la valeur de la somme dans une variable runningSum. )

try {
    double x = double.Parse(TextBox1.Text);
    runningSum += x;
catch (ArgumentException ax) {
    //handle if it is not a number in the TextBox
}

Méthode 3: TryParse ()

Une version plus avancée qui combine try-catch et Parse () utilise le double.TryParse () code > méthode qui renvoie une valeur vrai / faux selon que la conversion a réussi ou non.

Regex r = new Regex(@"^[0-9]+$")


4 commentaires

C'est assez important d'écrire une expression régulière appropriée pour le nombre à virgule flottante double (permettez-moi de donner quelques valeurs correctes à titre d'exemples: .1 , -.2 , 1.23 , 1e-2 , -1E + 1 )


Eh bien, le plus souvent, vous n'avez pas vraiment besoin d'écrire ces choses vous-même. Vous pouvez simplement les rechercher sur Google. Je pense que ce qu'il faut retenir de cette méthode, c'est son existence. :) Vous voyez, il faut environ 1 minute pour trouver un modèle sur SO: stackoverflow.com/questions/33939770/...


Exemples de compteur pour un modèle de réponse accepté ( ^ -? [0-9] * \.? [0-9] + $ ): 1E + 1 < / code> et -1e-1 (tous deux valides mais ne correspondent pas )


Je me demande si quelqu'un va jamais taper "1E + 1" dans un TextBox en 2019. Mais vous avez raison, c'est vrai!