Puis-je savoir qu'il existe un moyen simple d'effectuer cela? Il rencontrera une erreur lorsque a.text est nul. Si je ne détecte pas un par un, avec un code simple puis-je convertir a.text null en 0?

Dim count1 As Integer = 0
count1 = Convert.ToInt32(a.Text) + Convert.ToInt32(b.Text) + Convert.ToInt32(c.Text)
txt_display.Text = count1

Vous avez une autre méthode plutôt que j'aime ci-dessous, détectez une par une.

if a.Text = "" Then
a.Text = 0
End If
2
Mike 27 janv. 2017 à 11:54

5 réponses

Meilleure réponse

Vous devez les détecter un par un. La meilleure façon, sera de créer votre propre fonction. Essayez ci-dessous.

Dim count1 As Integer = 0
count1 = ConvertToInteger(a.Text) + ConvertToInteger(b.Text) + ConvertToInteger(c.Text)
txt_display.Text = count1




Private Function ConvertToInteger(ByRef value As String) As Integer
    If String.IsNullOrEmpty(value) Then
        value = "0"
    End If
    Return Convert.ToInt32(value)
End Function
4
Mukul Varshney 27 janv. 2017 à 09:05

Selon le Microsoft Documentation, une chaîne nulle (Nothing) est différente d'une chaîne vide (""):

La valeur par défaut de String est Nothing (une référence nulle). Notez que ce n'est pas la même chose que la chaîne vide (valeur "").

Vous utilisez également l'opérateur =, qui peut être délicat avec les types String. Pour plus d'informations, consultez ce post et la réponse qui a reçu une prime de 50 points.

Si vous utilisez If avec seulement deux arguments, le code suivant

If a.Text Is Nothing Then
    a.Text = 0
End If

Peut être transformé en une seule ligne: Dim MyNumber as Integer = If(a.Text, 0)

Si vous avez l'intention de travailler avec des chaînes vides, vous pouvez utiliser: Dim MyNumber as Integer = If(a.Text.Length = 0, 0, a.Text).

Si vous voulez traiter les deux, vous pouvez utiliser String.IsNullOrEmpty(a.Text) comme suggéré par la réponse actuellement acceptée; ou vous pouvez utiliser a.Text="", a.Text = String.Empty ou a.Text = vbNullString, qui sont tous égaux (voir le post auquel j'ai fait référence plus tôt)

Enfin, notez que la conversion d'un type String en un type Integer se fait implicitement. Il n'est pas nécessaire d'utiliser les conversions de diffusion explicites telles que CType() ou Convert.ToInt32.

0
Ama 30 sept. 2019 à 18:50

Si votre objectif est de faire la somme des valeurs dans vos zones de texte et d'ignorer les zones de texte qui ne peuvent pas être converties en nombres entiers, vous pouvez simplement utiliser Int32.TryParse.
Il définira votre variable sur 0 si le texte ne peut pas être converti en entier sans lever d'exceptions.

' In place of your textboxes
Dim x1 As String = "2"
Dim x2 As String = Nothing
Dim x3 As String = "5"

Dim a, b, c As Integer

Int32.TryParse(x1, a)
Int32.TryParse(x2, b)
Int32.TryParse(x3, c)

Dim result = a + b + c
Console.WriteLine(result)

Au lieu de cela, si vous souhaitez écrire la chaîne "0" dans le texte de la zone de texte pour signaler à votre utilisateur la mauvaise entrée, vous devez vérifier les zones de texte une par une, en utilisant à nouveau Int32.TryParse

Dim value1 as Integer
if Not Int32.TryParse(a.Text, value1) Then
   a.Text = "0"
End If

' Here the variable value1 contains the converted value or zero.
' repeat for the other textboxes involved
3
Steve 27 janv. 2017 à 09:30

Une approche différente utilisant If Operator:

Dim count1 As Integer = 0
count1 = If(String.IsNullOrEmpty(a.Text), 0, Convert.ToInt32(a.Text)) + If(String.IsNullOrEmpty(b.Text), 0, Convert.ToInt32(b.Text)) + If(String.IsNullOrEmpty(c.Text), 0, Convert.ToInt32(c.Text))
txt_display.Text = count1
3
FN90 19 juin 2018 à 20:25

Exemple:

If String.IsNullOrEmpty(a.Text) Then
 a.Text = "0"
End If
1
Svekke 27 janv. 2017 à 08:57