ProgrammationDéveloppeur d'applications de bureau en Visual Basic

Comment implémenter le traitement des entrées utilisateur (par exemple, à partir d'un TextBox) en tenant compte de la vérification que le nombre saisi est un chiffre afin de prévenir les erreurs de conversion de type en Visual Basic ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Lors du traitement des entrées utilisateur, il est crucial d'éviter les erreurs de conversion de type lorsque l'utilisateur saisit par exemple quelque chose qui n'est pas un chiffre dans TextBox. Cela est pertinent pour garantir la robustesse de l'application.

Historique de la question :

Dans VB6 et VB.NET, les erreurs de conversion (par exemple, via CInt ou Val) entraînaient des situations de plantage. Plus tard, des moyens plus sûrs, tels que Integer.TryParse, ont été introduits.

Problème :

Lorsque l'on essaie de convertir des données incorrectes (lettres, caractères spéciaux, chaîne vide), les méthodes standard (CInt, CDbl) lancent une exception. En conséquence, l'application peut se fermer de manière inattendue.

Solution :

Pour une conversion sûre, utilisez TryParse. Elle renvoie un booléen indiquant le succès de l'opération de conversion de chaîne en nombre et empêche les exceptions.

Exemple de code :

Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"Vous avez saisi le nombre : {number}") Else MessageBox.Show("Erreur : saisie non numérique") End If

Caractéristiques clés :

  • TryParse ne lance pas d'exception en cas d'échec
  • Permet de réagir de manière flexible à une entrée invalide
  • Complètement compatible avec la localisation et les formats

Questions pièges.

Que renverra la fonction Val("123abc") et pourquoi cela peut-il être dangereux ?

Val("123abc") renverra 123, en ignorant les caractères non numériques après le chiffre, ce qui entraîne des erreurs si l'utilisateur a accidentellement saisi un caractère superflu.

Peut-on convertir une chaîne vide avec CInt("") ?

Non, la fonction lancera une exception InvalidCastException.

Quel approche choisir pour les nombres à virgule flottante en tenant compte de la localisation ?

Utilisez Double.TryParse avec un CultureInfo spécifié, car dans certaines localisations, la virgule , est le séparateur de la partie décimale, alors que dans d'autres, c'est le point ..

Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)

Erreurs typiques et anti-patterns

  • Utiliser Val pour obtenir un nombre avec un résultat non contrôlé
  • Appliquer CInt sans vérifier le contenu
  • Absence de messages d'erreur utilisateur sur les saisies

Exemple de la vie quotidienne

Cas négatif

Le développeur convertit directement le texte du champ en nombre : Dim n = CInt(TextBox1.Text) sans vérification.

Avantages :

  • Code minimal

Inconvénients :

  • Le programme plante en cas de saisie incorrecte
  • Pas de messages d'erreur

Cas positif

Utilisation de TryParse avec notification à l'utilisateur sur une saisie incorrecte (voir exemple ci-dessus).

Avantages :

  • Application robuste
  • Meilleure expérience utilisateur

Inconvénients :

  • Nécessite l'ajout de plus de code pour le traitement des erreurs et la localisation des messages