[VB.NET] NUMERIXBOX - UNE TEXTBOX NUMÉRIQUE QUI GÈRE LES DÉCIMALES ET LES ARROND
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
4 sept. 2007 à 09:27
jedry
Messages postés19Date d'inscriptionvendredi 26 novembre 2010StatutMembreDernière intervention10 avril 2011
-
23 mars 2011 à 15:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
jedry
Messages postés19Date d'inscriptionvendredi 26 novembre 2010StatutMembreDernière intervention10 avril 2011 23 mars 2011 à 15:33
Et j'ajoute MERCI que j'avais oublié.
jedry
Messages postés19Date d'inscriptionvendredi 26 novembre 2010StatutMembreDernière intervention10 avril 2011 23 mars 2011 à 15:32
Je suis débutant niveau "paquerettes", je découvre après 3 jours de recherches et de tâtonnements. Je n'ai qu'un mot à dire FABULEUX !
cs_Byrong
Messages postés224Date d'inscriptionmercredi 28 septembre 2005StatutMembreDernière intervention24 juillet 2013 2 mars 2011 à 10:55
lorsque j'utilise le point, ca bug
exemple 19.45
il me met 1.945,00
TeDeum
Messages postés21Date d'inscriptionmercredi 8 mai 2002StatutMembreDernière intervention 8 janvier 20081 8 janv. 2008 à 11:46
Salut,
Voilà une source super intéressante !!
Merci à toi ...
De mon coté j'ai ajouté deux petite chose qui me semble intéressante et je te les soumets :
1) Afin de permettre la saisie d'un entier uniquement (et pour éviter que l'utilisateur ne saisissent un décimal), j'ai ajouté le test de Decimals dans le KeyPress :
Avant : If Char.IsPunctuation(e.KeyChar) And InStr(Text, DecimalSeparator) > 0 Then e.Handled = TrueApres : If Char.IsPunctuation(e.KeyChar) And (InStr(Text, DecimalSeparator) > 0 Or Me.Decimals 0) Then e.Handled True
2) Afin de prendre en compte les systèmes ayant le . comme séparateur décimal (Il y en a), j'ai modifié la procédure ReplaceSeparateurDecimal par :
Select Case DecimalSeparator
Case "." : Text = Replace(Text, ",", DecimalSeparator)
Case "," : Text = Replace(Text, ".", DecimalSeparator)
End Select
Voilà, dans tous les cas merci encore, c'est pratique, utile et éfficace !!
cs_chris81
Messages postés589Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention29 avril 20082 7 sept. 2007 à 20:40
oui tu as raison c'etait juste des questions j'ai pas testé :)
cs_Benouille
Messages postés215Date d'inscriptionjeudi 24 octobre 2002StatutMembreDernière intervention 7 septembre 2007 7 sept. 2007 à 16:01
Chris81:
bon j'ai testé ce que tu m'as dit,
1 pour arrondir le plus simple est d'utiliser round ou format
2 oui on peut effacer avec del avec suppr avec ctrl+x ... je ne comprends pas ta remarque
3 la fonction Trim enlève les espaces a droite et gauche et non au milieu comme désiré ici.
4 on ne peut frapper qu'une seule ponctuation cf dans Private Sub NumericBox_KeyPress
[..]
' une seule ponctuation
If e.KeyChar.IsPunctuation(e.KeyChar) And InStr(Text, DecimalSeparator) > 0 Then e.Handled = True
End Sub
j'ai l'impression que tu as lu en détail mais pas franchement tester non ?
;Þ
++
cs_chris81
Messages postés589Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention29 avril 20082 5 sept. 2007 à 16:45
re, de plus pour enlever les espaces utilise la fonction TRIM contenu dans la classe string. Il te manque une verif: savoir si le gars tape 12.3.5
a+
cs_chris81
Messages postés589Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention29 avril 20082 5 sept. 2007 à 16:42
salut,
le plus simple pour arrondir est d'utiliser la surcharge du tostring, monDouble.toString("N2") ou N3....
De plus as tu essayé d'effacer un chiffre avec le bouton retour (au dessus de enter) pour voir le comportement ?
Sinon bon travail a+
cs_Benouille
Messages postés215Date d'inscriptionjeudi 24 octobre 2002StatutMembreDernière intervention 7 septembre 2007 4 sept. 2007 à 12:05
d'ailleurs le plus simple pour t'en convaincre c'est d'ouvrir un projet et de poser les 2 dessus et de comparer ;)
cs_Benouille
Messages postés215Date d'inscriptionjeudi 24 octobre 2002StatutMembreDernière intervention 7 septembre 2007 4 sept. 2007 à 12:03
:D
par rapport au NumericUpDown:
les plus:
ressemble à une TextBox (y a pas l'assenceur pourri à droite)
a une proprieté .Text pour l'affichage et se comporte comme une textbox (events...) dont il hérite
on peut taper UN "." sur le pavé numérique qu'il transforme en ","
les arrondis sont gérés directement.
assure qu'un texte rentré est toujours numérique.
les moins:
ne gère pas les hexadécimaux (en même temps bon hein ...)
n'a pas de maximum et de minimum spécifié (peut être à rajouter pour un %age?)
en bref, a moins d'avoir des hexadécimaux à traiter, NumericUpDown est un peu plus chiant à utiliser.
Dans le cas courant (indices, monétaires, quantités ...) NumericBox s'intègre mieux au formulaire et est plus simple à utiliser.
en toute inobjectivité, voila :)
vbnouille, subjection votre honneur!
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 4 sept. 2007 à 09:27
Pas regardé le code, mais d'après la description je ne vois pas différence avec un NumericUpDown sauf que c'est moins complet !?
23 mars 2011 à 15:33
23 mars 2011 à 15:32
2 mars 2011 à 10:55
exemple 19.45
il me met 1.945,00
8 janv. 2008 à 11:46
Voilà une source super intéressante !!
Merci à toi ...
De mon coté j'ai ajouté deux petite chose qui me semble intéressante et je te les soumets :
1) Afin de permettre la saisie d'un entier uniquement (et pour éviter que l'utilisateur ne saisissent un décimal), j'ai ajouté le test de Decimals dans le KeyPress :
Avant : If Char.IsPunctuation(e.KeyChar) And InStr(Text, DecimalSeparator) > 0 Then e.Handled = TrueApres : If Char.IsPunctuation(e.KeyChar) And (InStr(Text, DecimalSeparator) > 0 Or Me.Decimals 0) Then e.Handled True
2) Afin de prendre en compte les systèmes ayant le . comme séparateur décimal (Il y en a), j'ai modifié la procédure ReplaceSeparateurDecimal par :
Select Case DecimalSeparator
Case "." : Text = Replace(Text, ",", DecimalSeparator)
Case "," : Text = Replace(Text, ".", DecimalSeparator)
End Select
Voilà, dans tous les cas merci encore, c'est pratique, utile et éfficace !!
7 sept. 2007 à 20:40
7 sept. 2007 à 16:01
bon j'ai testé ce que tu m'as dit,
1 pour arrondir le plus simple est d'utiliser round ou format
2 oui on peut effacer avec del avec suppr avec ctrl+x ... je ne comprends pas ta remarque
3 la fonction Trim enlève les espaces a droite et gauche et non au milieu comme désiré ici.
4 on ne peut frapper qu'une seule ponctuation cf dans Private Sub NumericBox_KeyPress
[..]
' une seule ponctuation
If e.KeyChar.IsPunctuation(e.KeyChar) And InStr(Text, DecimalSeparator) > 0 Then e.Handled = True
End Sub
j'ai l'impression que tu as lu en détail mais pas franchement tester non ?
;Þ
++
5 sept. 2007 à 16:45
a+
5 sept. 2007 à 16:42
le plus simple pour arrondir est d'utiliser la surcharge du tostring, monDouble.toString("N2") ou N3....
De plus as tu essayé d'effacer un chiffre avec le bouton retour (au dessus de enter) pour voir le comportement ?
Sinon bon travail a+
4 sept. 2007 à 12:05
4 sept. 2007 à 12:03
par rapport au NumericUpDown:
les plus:
ressemble à une TextBox (y a pas l'assenceur pourri à droite)
a une proprieté .Text pour l'affichage et se comporte comme une textbox (events...) dont il hérite
on peut taper UN "." sur le pavé numérique qu'il transforme en ","
les arrondis sont gérés directement.
assure qu'un texte rentré est toujours numérique.
les moins:
ne gère pas les hexadécimaux (en même temps bon hein ...)
n'a pas de maximum et de minimum spécifié (peut être à rajouter pour un %age?)
en bref, a moins d'avoir des hexadécimaux à traiter, NumericUpDown est un peu plus chiant à utiliser.
Dans le cas courant (indices, monétaires, quantités ...) NumericBox s'intègre mieux au formulaire et est plus simple à utiliser.
en toute inobjectivité, voila :)
vbnouille, subjection votre honneur!
4 sept. 2007 à 09:27