Bonjour,
Plus que novice en vb.net, je me heurte a un souci bien simple mais que je n'arrive pas a résoudre :
il s'agit de l'addition de 2 valeurs d'une textbox
en gros :
le contenu est de type double limité a 2 chiffres après la virgule
Je veux
TextboxC = TextboxA + TextboxB
En VB6, si je fais
Val(TextboxA) + Val (TextboxB)
, je n'ai pas de souci
en VB.NET (sous VB 2010Express edition), il n'en est pas de même, cela ne fonctionne pas du tout (Val(TextboxA) non déclarée .....
en essayant pour voir
TextboxA.Text + TextboxB.Text
, les 2 valeurs se placent l'une a cote de l'autre sans s'additionner ce qui est logique.
Que se passe t'il ??
Merci bien
tchconst > Vision de VB quelque peu restrictive. Les problèmes évoqués ne sont pas inhérant à VB mais à la programmation en général. Une saisie devrait toujours être controlée, un code devrait toujours être blindé, et ce quelque soit le langage.
Bref c'est un autre débat que l'on ne va pas entamer ici, c'est pas le sujet du fil.
Attila54 >
Voila un code pour la seconde partie de ton problème, et qui du coup va aussi t'expliquer comment résoudre la première partie.
Pour les puristes, c'est un peu du bricolage car le controle de saisie effectué là, est d'une part incomplet et devrait normalement être fait à la saisie
- 1ere ligne : On prend la valeur sélectionnée dans la listbox sous sa représentation en String, dans laquelle on replace tous les points, symbole décimal américain par des virgules, symbole décimal français.
- On convertie le tout en Double, pour le reconvertir en string avec le format désiré.
- On met le tout dans QNBR
Il va s'en dire que si les valeurs de la listbox sont déjà formatées comme souhaité et qu'il n'y a aucun risque qu'un mauvais symbole décimal soit rencontré, il est inutile de faire tout cela, il suffit de prendre la valeur sélectionné de la listbox sous forme de string et la mettre dans QNBR
- 2eme ligne : Je pars du principe que QNBR ne peut pas être saisi ni modifié par l'utilisateur et qu'il contient un nombre déjà correctement formaté. Je le converti donc simplement en double.
- Pour TextboxZ, je considère qu'il est saisie donc je prend les précaution précédentes avant de convertir en double.
- Une fois l'addition faite, on reconverti le résultat en string au format voulu et on met le tout dans textboxNBR2
Enjoy.
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Pour les cases à cocher (option et checkbutton), c'est la touche "espace" qu'il faut utiliser, sinon intercepte la touche "Entrée" du clavier (Event KeyPress)
en .NET, évite les reliquats de VB6, préfères passer par les procédures .NET :
TextBoxResultat.Text=(Double.parse(TextBox1.Text)+Double.parse(TextBox1.Text)).ToString()
Pour le oublier plus facilement, tu peux prendre l'habitude de systématiquement décocher la référence Microsoft Visual Basic dans les propriétés de tes projets.
Ne t'inquiète pas, ça va faire mal au début, mais avec le temps ça passe.
Puis le forum sera toujours là pour t'aider.
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Bon alors le calcul fonctionne mais il m'affiche cette erreur
EXCEPTION NON GEREE
Consultez la fin de ce message pour plus de détails sur l'appel du débogage
juste-à-temps (JIT) à la place de cette boîte de dialogue.
************** Texte de l'exception **************
System.FormatException: Le format de la chaîne d'entrée est incorrect.
à System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
à System.Convert.ToDouble(String value)
à Calculateur.visiondepres.ListQ_Click1(Object sender, EventArgs e) dans X:\LOGICIELS\MEDICAUX\CALCULATEUR\VB.NET\projet brut\5\Calculateur vb net avec QFU\Calculateur\visionpres.vb:ligne 387
à System.Windows.Forms.Control.OnClick(EventArgs e)
à System.Windows.Forms.ListBox.WndProc(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Assemblys chargés **************
mscorlib
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 (RTMRel.030319-0100)
CodeBase : file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Calculateur
Version de l'assembly : 1.0.0.0
Version Win32 : 1.0.0.0
CodeBase : file:///X:/LOGICIELS/MEDICAUX/CALCULATEUR/VB.NET/projet%20brut/5/Calculateur%20vb%20net%20avec%20QFU/Calculateur/bin/Debug/Calculateur.exe
----------------------------------------
Microsoft.VisualBasic
Version de l'assembly : 10.0.0.0
Version Win32 : 10.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 (RTMRel.030319-0100)
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Runtime.Remoting
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 (RTMRel.030319-0100)
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
mscorlib.resources
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 (RTMRel.030319-0100)
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
WindowsBase
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/WindowsBase/v4.0_4.0.0.0__31bf3856ad364e35/WindowsBase.dll
----------------------------------------
Microsoft.VisualBasic.PowerPacks.Vs
Version de l'assembly : 10.0.0.0
Version Win32 : 10.0.30319.1
CodeBase : file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic.PowerPacks.Vs/10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.PowerPacks.Vs.dll
----------------------------------------
System.Windows.Forms.resources
Version de l'assembly : 4.0.0.0
Version Win32 : 4.0.30319.1 built by: RTMRel
CodeBase : file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
************** Débogage JIT **************
Pour activer le débogage juste-à-temps (JIT), le fichier de configuration pour cette
application ou cet ordinateur (machine.config) doit avoir la valeur
jitDebugging définie dans la section system.windows.forms.
L'application doit également être compilée avec le débogage
activé.
Lorsque le débogage juste-à-temps est activé, les exceptions non gérées
seront envoyées au débogueur JIT inscrit sur l'ordinateur
plutôt que d'être gérées par cette boîte de dialogue.
j'avoue être perdu la ...... cela veut dire quoi exactement et comment remedier ?
De plus je rencontre le même problème avec une addition mais d'un type un peu particulier
-J'ai une listbox contenant 60 valeurs, j'appelle cette liste LISTNBR
-je clique sur une de ces valeurs, celle ci me déclenche des calculs qui s'affichent dans plusieurs textbox, je veux que la valeur sur laquelle je clique s'affiche dans une textbox QNBR (2 chiffres après la virgule max)
j'ai fait
Private nombre As Double ' valeur choisie dans la Listbox
QNBR.Text = nombre.ToString("0.00")
Je veux ensuite une TextboxNBR2 telle que la valeur de TextboxNBR2 = valeur QNBR + valeur TextboxZ (textbox Z etant remplie par un nombre toujours a 2 decimales max)
QNBR.Text = nombre.ToString ne m'affiche rien je ne vois pas comment traduire en vb :
"Le contenu de QNBR = nombre choisi dans la listNBR"
Merci beaucoup, je dois "reprendre" du vb développé par beaucoup plus aguerri que moi, alors je rame un peu beaucoup ....
EXCEPTION NON GEREE
Consultez la fin de ce message pour plus de détails sur l'appel du débogage
juste-à-temps (JIT) à la place de cette boîte de dialogue.
************** Texte de l'exception **************
System.FormatException: Le format de la chaîne d'entrée est incorrect.
Le texte saisie dans une des textbox n'est pas reconnu comme pouvant être converti en un nombre de type Double
Ca sent un problème de point à la place d'une virgule ou inversement.
ps : je t'ai ecouté casy, j'ai décoché ..... et je suis dans le vent .....
Je l'avais dit, ça fait mal au début.
Si tu es trop perdu, recoche. Tu décochera plus tard sur d'autres projets quand tu sera plus à l'aise.
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Dac pour le probleme, merci de me dire de quoi il retourne, mais comment puis je regler cela ???
Cette boite est arrivée après mes deux additions foireuses
Et comment traduire "Le contenu de QNBR = nombre choisi dans la listNBR" en VB ????
en 2 mots, le message renvoyé est : "Fais gaffe !". Ouaip, chez VB ça veut simplement dire que le code doit être blindé partout et surtout du côté des types de valeurs employés ; il FAUT vérifier chaque type de valeur contenue dans chaque textBox, du genre
if isNumeric(chacun_de_mes_textbox.text) et seulement ensuite procéder aux opérations. Et même qu'un petit Trim() n'y ferait pas de mal. Ce qui fait la force de VB est qu'il gère très bien le doute et il est illusoire de changer les options de vérification de débogage. VB est toujours plus fort que toi. Enfin, plus il y aura de blocs Try mieux ce sera !
tchConst
merci beaucoup, je teste cela au boulot des lundi
eh puis ... si j'osais ..... j'ai un checkbox qui fonctionne parfaitement .. tant qu'on le sélectionne a la souris.
N'y a t'il pas possibilité de cocher la case avec la touche "enter du clavier "
Tks a lot
Comment gérer d'ailleurs ces problèmes récurrent de , à la place de . ... Quand même pas avec un Replace(MaString,",",".") systématique, si ? et ça dépend par de l'environnement linguistique de l'OS sur lequel tourne le code ?
Comment gérer d'ailleurs ces problèmes récurrent de , à la place de . ... Quand même pas avec un Replace(MaString,",",".") systématique, si ? et ça dépend par de l'environnement linguistique de l'OS sur lequel tourne le code ?
Il est évident que, pour un contrôle de saisie "propre", celui-ci devrait être fait à la saisie, directement.
C'est à dire que pour un textbox devant recevoir uniquement un nombre de type double, il faudrait, dans un des évènements KeyDown, KeyUp ou KeyPress, regarder le caractère en cours de saisie et annuler tout ce qui n'est pas autorisé :
- caractère autre que chiffre, signe négatif, symbole décimal de culture actuelle
- signe négatif et symbole décimal s'ils sont déjà présents une fois
- signe négatif si le point d'insertion n'est pas avant le premier caractère du texte
et on peut rajouter si c'est pertinent, un contrôle de dépassement des limites autorisées
Tout ça devant être fait pour chacune des textbox (en adaptant évidemment le contrôle à ce qu'elles doivent contenir)
Une autre solution consiste à laisser une saisie libre, mais avant de lancer un calcul quelconque, procéder à une vérification de l'ensemble des saisies. Mais cette méthode exclue, de fait, des calcul intermédiaire automatiques sur simple saisie ou sélection.
D'autres solutions peuvent être aussi trouvé, mais un minimum de contrôle est nécessaire soit en préventif pour empêcher les erreurs (ce que je viens de décrire), soit en curatif pour corriger les erreurs (code que j'ai donné précédemment).
On peut aussi décider de ne rien faire et de générer une erreur pour l'utilisateur à condition d'intercepter les exceptions pour ne pas planter le logiciel.
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i