Probleme TextBox, Calcul immédiat, Chargement du formulaire [Résolu]

ptit_tof57 79 Messages postés lundi 28 août 2006Date d'inscription 4 avril 2009 Dernière intervention - 12 sept. 2006 à 19:28 - Dernière réponse : ptit_tof57 79 Messages postés lundi 28 août 2006Date d'inscription 4 avril 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 12 sept. 2006 à 23:01
3
Merci
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.

Merci Julien237 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de Julien237
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 12 sept. 2006 à 19:43
0
Merci
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 #
Commenter la réponse de cs_casy
ptit_tof57 79 Messages postés lundi 28 août 2006Date d'inscription 4 avril 2009 Dernière intervention - 12 sept. 2006 à 20:05
0
Merci
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...
Commenter la réponse de ptit_tof57
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 12 sept. 2006 à 20:39
0
Merci
"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 #
Commenter la réponse de cs_casy
cs_Nurgle 1648 Messages postés samedi 6 novembre 2004Date d'inscription 28 avril 2011 Dernière intervention - 12 sept. 2006 à 22:12
0
Merci
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)
Commenter la réponse de cs_Nurgle
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 12 sept. 2006 à 23:03
0
Merci
Excuse moi j'ai laissé une erreur dans ma correction, c'est bien entendu

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

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.