ptit_tof57
Messages postés79Date d'inscriptionlundi 28 août 2006StatutMembreDernière intervention 4 avril 2009
-
12 sept. 2006 à 19:28
ptit_tof57
Messages postés79Date d'inscriptionlundi 28 août 2006StatutMembreDerniè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
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
ptit_tof57
Messages postés79Date d'inscriptionlundi 28 août 2006StatutMembreDernière intervention 4 avril 20091 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...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20115 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)