Probleme TextBox, Calcul immédiat, Chargement du formulaire

Résolu
ptit_tof57 Messages postés 79 Date d'inscription lundi 28 août 2006 Statut Membre Dernière intervention 4 avril 2009 - 12 sept. 2006 à 19:28
ptit_tof57 Messages postés 79 Date d'inscription lundi 28 août 2006 Statut Membre Dernière intervention 4 avril 2009 - 13 sept. 2006 à 05:10
Bonjour, je dispose d'un groupe box contenant plusieurs textbox.
Je souhaite que les calculs dont j'ai besoin de réalisé se fassent automatiquement à chaque changement
Sous vb6 il n'y aucun probleme mais sous vb2005 lorsque je lance mon formulaire j'ai une erreur du type << Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : La conversion de la chaîne "" en type 'Long' n'est pas valide.>>

voici mon code pour la textbox1

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        Dim var1 As Long = TextBox1.Text
        Dim var2 As Long = TextBox2.Text
        Dim var3 As Long = TextBox3.Text
        Dim var4 As Long = TextBox4.Text
        Dim var5 As Long = TextBox5.Text
        Dim var6 As Long = TextBox6.Text
        Dim ProdH As Long = (30 * (var1)) * ((1.1) ^ (var1))

        var3 = (ProdH * var6) + var2
        'Test le résultat du calcul de base pour lui assigné une lettre, K, M ou G
        If var3 > 1000 And var3 < 999999 Then
            var3 = (var3 / 1000) & "K"
        ElseIf var3 > 1000000 And var3 < 999999999 Then
            var3 = (var3 / 1000000) & "M"
        ElseIf var3 > 1000000000 And var3 < 999999999999.0# Then
            var3 = var3 / 1000000000 & "G"
        End If

        If ProdH > 0 Then 'Test si ProdH est different de 0 pour la division
            var5 = (var4 / ProdH)
        End If
    End Sub
 
merci d'avance.
Christophe

7 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
12 sept. 2006 à 23:01
Salut,
Change tes déclarations en utilisant Val() :

Dim var1 As Long = Val(TextBox1.Text)

Es-tu sûr que tu ne dois pas utiliser des nombres à virgules ? (Vu tes calculs...)
Dans ce cas :

Dim var1 As Double = Val(Replace(TextBox1.Text,",","."))

(Le replace de , en . est pour éviter les erreurs de symboles de décimales)
Balances tes & "K", & M" et & "G", tu travailles sur des valeurs numériques, pas sur des chaines de caractères, ca n'a pas de sens d'écrire ca... J'imagine que ton intentions étaient des les rajouter à la fin dans ton textbox, fais donc comme ceci :

If var3 > 1000 And var3 < 999999 Then
Textbox3.Text = (Trim(var3) / 1000) & "K"
ElseIf var3 > 1000000 And var3 < 999999999 Then
idem...
ElseIf var3 > 1000000000 And var3 < 999999999999.0# Then
idem...
End If

REM : J'utilise le Trim pour faire une conversion de nombres en string parce que la fonction prévue à cet effet (Str(Number)) laisse systématiquement un espace, l'utilisation correct pour la conversion serait donc Trim(Str(Number)) mais la conversion implicite de Trim(Number) ne pose pas de problème...

Julien.
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 sept. 2006 à 19:43
La conversion de la chaîne "" en type 'Long'



Que represente "" comme nombre ????

En d'autre termes, comment veux-tu convertir une chaine vide en nombre.

Il faut que tu veille à ce que toutes les texbox soient remplies avec un texte représentant un nombre valide avant d'executer ce code
Une chaine vide n'est pas un nombre valide. "Toto à l'école" n'est pas non plus un nombre valide même si dans ce cas la chaine n'est pas vide.

De plus il n'est pas certain que .net accepte comme ça une convertion implicite de texte en long, il n'est pas aussi permissif que VB6
Je pense qu'il faut que tu repense ton code.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0
ptit_tof57 Messages postés 79 Date d'inscription lundi 28 août 2006 Statut Membre Dernière intervention 4 avril 2009 1
12 sept. 2006 à 20:05
En fait lorsque la propriété text de TextBox1 n'est pas renseigné, le calcul fonctionne.
Mais lorsque je mets un chiffre exemple 0 pour initialisé le programme, je pense qu'il prend ce chiffre pour un changement de text alors il execute le calcul mais tout ne doit pas être encor chargé. Tout comme toi, j'ai du mal a savoir a quelle valeur correspond "".
Après avoir mis des points d'arrêt dans le code, cette erreur survient après la lecture de la ligne : "Dim ProdH As Long = (30 * (var1)) * ((1.1) ^ (var1))"

J'espere être assez clair, je débute et c'est peu un casse tête...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 sept. 2006 à 20:39
"Tout comme toi, j'ai du mal a savoir a quelle valeur correspond "" " Non,non, moi je n'ai aucun mal à savoir. "" est une chaine vide. Le vide ne correspond à aucun nombre connu en informatique. "" ne peut pas etre interprété de quelque manières que ce soit en nombre.

Quand je disais que tu devrais repenser ton code, je ne l'avais pas vraiment regardé. Après une petite analyse, tes déclarations sont pour moi, bien que je ne maitrise pas du tout .net, pas bonnes. Il faut que tu trouve un moyen de, d'abords tester (et en dehors des déclarations, je pense) si les valeurs des textbox peuvent etre interprétées comme des nombres (je sais si isnumeric existe toujours en .net). Ensuite n'executer la suite du code qui si toutes les textbox continnent des valeurs correctes.
Ensuite Dim var3 As Long TextBox3.Text  ne sert à rien puisque tu ne l'utilise pas. Dès la première ligne de code tu fais var3 (ProdH * var6) + var2 et donc tu écrase la valeur précédente qui est perdue.
Belle incohérence sur cette ligne : var3 (var3 / 1000) & "K" var3 est un long. var3/1000 reste un long, c'est dire un nombre. Comment peux-tu mettre une lettre (K) dans un nombre ? C'est comme si chaque matin, pour aller au boulot tu montais dans <strike>ta voiture</strike> ton carré de chocolat. Il y a quelque chose qui peut pas coller. La même chose avec var3 (var3 / 1000000) & "M" et var3 = var3 / 1000000000 & "G"

 

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
12 sept. 2006 à 22:12
Salut,
Je rajoute tout de même une petite chose : Tu fais du .NET 2.0 là !!  c'est finit le VB6, ici toutes tes variables sont typées. Explications :

Dans cette ligne :
Dim var1 As Long = TextBox1.Text
"TextBox1.Text" n'est pas un Long (ou Int64), c'est un String, je te conseille donc de te renseigner sur les méthodes Long.Parse et Long.TryParse qui permettent de convertir proprement un String en Long.
(Il y a également la méthode Clng() mais le must c'est tout de même TryParse )

Je te conseille également de tester si tes TextBox.Text sont égale à une chaine vide avant de faire le calcul (pour remplacer les valeurs correspondantes par 0, ou par exemple pour balancer une erreur...)

Une dernière chose : un tutorial VB.NET (peut toujours être utile, surtout pour voir ce qui a changé depuis VB6 )

(pour ce qui est des K, G et autres lettres qui viennent s'ajouter à des nombres... là... j'ai du mal  mais bon, il faut bien quitter ce vieux dinnosaure qu'est VB6 un jour ou l'autre. C'est bien ! :p)

<hr width="100%" size="2" />Nurgle (Antoine)
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
12 sept. 2006 à 23:03
Excuse moi j'ai laissé une erreur dans ma correction, c'est bien entendu

Textbox3.Text = (Trim(var3 / 1000)) & "K"

Julien.
0
ptit_tof57 Messages postés 79 Date d'inscription lundi 28 août 2006 Statut Membre Dernière intervention 4 avril 2009 1
13 sept. 2006 à 05:10
Merci a vous tous pour vos réponses :) celle de Julien237 me convient parfaitement :)
Encore merci ;)
0
Rejoignez-nous