VB.NET (2008) - Traiter les chiffres après la virgule... [Résolu]

Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
- - Dernière réponse : Vogalen
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
- 1 juin 2010 à 20:52
Salut,

J'ai une entrée dans un textbox contenant uniquement des chiffres. Je veux traiter les chiffres avant et après la virgule séparément. Il faudrait donc que je trouve la virgule du sender.Text, mais je ne sais vraiment pas comment faire... Une idée ?

En passant, dans le textbox.KeyPress, je ne sais pas non plus comment ne laisser passer qu'une seule virgule...

Merci. Cela m'aiderais grandement!
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
19
3
Merci
Biensur que si, la NumericUpDown possede aussi une propriété "Hexadecimal"...

Quel bonheur le Winform

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Mayzz
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
19
3
Merci
Sérieusement, je ne vois pas pourquoi tu t'entête a vouloir faire ce que l'on appelle "une solution de bricolage" alors que tu dispose d'un contrôle tou prêt à l'emploi ?

Mais si tu y tiens...

Private Sub TextBox1_KeyPress(ByVal sender As Object, _
                              ByVal e As System.Windows.Forms.KeyPressEventArgs) _
                              Handles TextBox1.KeyPress

    If TextBox1.Text.LastIndexOf(",") <> -1 And _
        e.KeyChar = "," Then
        e.KeyChar = Nothing
    End If
         
End Sub


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Mayzz
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
19
0
Merci
Salut,

Utilise le composant approprié : NumericUpDown

Tu peux définir la valeur minimum et maximum et aussi le nombre de décimales après la virgule grâce à sa propriété DecimalPlaces.

Sa propriété Value te retourne la valeur saisie.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
0
Merci
Re,

Merci pour ta réponse.

Ta solution devrait très bien fonctionner, mais dans ce même textbox, selon le choix d'un combobox, l'utilisateur pourrait saisir des nombres hexadécimaux et la le numericUpDown ne fonctionnera pas.

Désoler pour le manque de précision de mon premier message :/

Merci.
Commenter la réponse de Vogalen
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
0
Merci
Re,

Okay, résolu alors :)

Mais y aurait-il moyen de le faire avec le sender.Text de trouver la virgule ?

Merci !
Commenter la réponse de Vogalen
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
12 mars 2011
0
Merci
Salut, pour trouver la virgule
tu peux utiliser InStr qui te donneras
la position de la virgule,
et ensuite tu pourras utiliser
Mid qui permettra de regarder
les chiffres après ou avant la virgule
à partir de la position de celle ci...
Commenter la réponse de raffika
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
19
0
Merci
Re,

Plus simple, l'instruction Split :

Dim Tab() As String = NumericUpDown1.Text.Split(",")

Tab(0)'Contiendra les chiffres avant la virgule
Tab(1)'Les chiffres suivants

Tab.Length' Te retroune le nombre d'élément du tableau, si 1 seul pas de virgule dans le cas contraire...

Voila @+

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
0
Merci
Re,

Désolé de vous redemander la question, mais ça fait plusieurs heures que je suis la dessus et je ne comprend vraiment pas.

J'ai repris mon textbox, qui est le sender, pour essayer avec mon idée du début qui était de trouver la virgule avec le sender.Text. Pour comprendre et pour ainsi savoir comment travailler avec les sender dans l'avenir...

Voici le code lors du textbox.KeyPress :
Dim virgule As Byte = 0

For i As Integer = 0 To (Len(sender.text) + 1)  ' Parcours le sender pour savoir 
   If sender.text(i) = "," Then                 ' s'il y a déjà une virgule.
      virgule += 1
   End If
Next

If virgule > 1 Then          ' S'il y a déjà une virgule, et que le caractère 
   If e.KeyChar = "," Then   ' saisie est une virgule, alors ne pas l'afficher.
      e.Handled = True
   End If
End If


Je comprend bien que l'événement KeyPress s'effectue avant l'écriture de la saisie dans le sender, c'est pourquoi le sender est vide lorsque le premier caractère est vérifier dans le KeyPress.

Mais ce code ne fonctionne pas. (Je n'ai pas trouvé mieux, en passant ^^).

Le programme plante au If de la boucle For me disant que l'index ce trouve en dehors des limites du tableau...

Explication : Je tape un chiffre, et (en Pas à pas détaillés), le programme plante à la condition de la boucle For... Pourtant la boucle commence à 0 pour aller jusqu'à minimum 1.

Comprend pas Une piste ?

Merci.

Un programmeur amateur qui ne se décourage pas !
Commenter la réponse de Vogalen
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
0
Merci
Re,

Ça répond exactement à ce que je voulais !

Merci.

En passant, comme je l'expliquais plus haut, c'est seulement pour comprendre...
Comme ca, maintenant, je vais savoir quoi faire à l'avenir puisque je comprend la méthode à utiliser. Si j'utilise un contrôle déjà tout près, je pourrais le refaire, mais pas dans toutes les situations. Merci encore !
Commenter la réponse de Vogalen
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
19
0
Merci
Oui c'est vrai que c'est mieu de comprendre, mais d'un autre coté si tu t'amuse a refaire tous les composants (ex: listview, treeview, datagridview) t'as pas fini ! ^^

Si ca t'intéresse télécharge reflector, c'est un logiciel qui permet de décompiler les codes du framework, de cette façon tu peux voir de quoi sont composé les contrôles .Net.


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
0
Merci
Re,

Super !!!

Merci de m'avoir fais découvrir ce logiciel. Je crois que je vais m'amuser !

A+
Commenter la réponse de Vogalen