VB.NET (2008) - Traiter les chiffres après la virgule...

Résolu
Vogalen Messages postés 6 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 1 juin 2010 - 31 mai 2010 à 16:47
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!

11 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
31 mai 2010 à 18:18
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.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
1 juin 2010 à 03:56
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.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
31 mai 2010 à 17:25
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.
0
Vogalen Messages postés 6 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 1 juin 2010
31 mai 2010 à 17:44
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vogalen Messages postés 6 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 1 juin 2010
31 mai 2010 à 18:41
Re,

Okay, résolu alors :)

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

Merci !
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
31 mai 2010 à 18:53
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...
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
31 mai 2010 à 21:37
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.
0
Vogalen Messages postés 6 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 1 juin 2010
1 juin 2010 à 00:59
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 !
0
Vogalen Messages postés 6 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 1 juin 2010
1 juin 2010 à 16:15
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 !
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
1 juin 2010 à 16:29
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.
0
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
Re,

Super !!!

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

A+
0
Rejoignez-nous