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

Signaler
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
-
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010
-
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!

11 réponses

Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
30
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.
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
30
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.
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
30
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.
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010

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.
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010

Re,

Okay, résolu alors :)

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

Merci !
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
12 mars 2011

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...
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
30
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.
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010

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 !
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010

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 !
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
30
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.
Messages postés
6
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
1 juin 2010

Re,

Super !!!

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

A+