vicosta
Messages postés178Date d'inscriptionlundi 5 juin 2006StatutMembreDernière intervention30 novembre 2011 17 juil. 2008 à 21:33
Aussi, pourqoi ne pas remplacer le code suivant:
If Right$(Text1.Text, 1) "0" Or Right$(Text1.Text, 1) "1" Or _ Right$(Text1.Text, 1) "2" Or Right$(Text1.Text, 1) "3" _ Or Right$(Text1.Text, 1) "4" Or Right$(Text1.Text, 1) "5" _ Or Right$(Text1.Text, 1) "6" Or Right$(Text1.Text, 1) "7" _ Or Right$(Text1.Text, 1) "8" Or Right$(Text1.Text, 1) "9" _ Or Right$(Text1.Text, 1) "." Or Right$(Text1.Text, 1) "-" Then
par...
if instr("0123456789.-",Right$(Text1.Text, 1)) then
?
ça fait une petite économie ;)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 17 juil. 2008 à 00:30
Du grand n'importe quoi...
tu te fiches des paramètres régionnaux. tu en cible des particuliers, voilà tout. tu interdis la frappe d'une virgule "," au profit d'un "."
Pourquoi ?
Sur un poste anglais, un type voulant placer des séparateurs des milliers se retrouveras avec des séparateurs décimaux... bel exemple d'universalité ^^
Les utilisateurs ont certains paramètres regionnaux, respectes les, c'est a ton programme de s'adapter (tu dois même faire le contraire que ce que tu fais, avec le pavé numérique : substituer une ',' au '.', si les regional settings l'exigent).
tu parles des fonctions de Cast (CSng, CDbl et CCur, principalement)
Elles utilisent, elles, les regional settings.
par contre, Val ou Str$ sont celles que l'on doit utiliser pour aller de/vers un format internationnal.
le controle de la saisie est effectivement un point sensible. mais il faut le faire bien.
comme pour les dates...
l'idée est de laisser l'utilisateur faire comme il lui semble.
Il devrait jouer avec ses regional settings.
On teste alors avec IsNumeric, voir s'il a fait n'importe quoi...
on peut alors utiliser CSng ou CDbl, pour obtenir notre donnée décimale.
Si IsNumeric renvoie False, on peut être tolérants, et tenter de jouer avec Val.
Au pire, il n'aura pas la valeur qu'il souhaitait... il aurait du faire gaffe ^^
Idem avec IsDate... fais confiance a l'utilisateur. Si la donnée est compréhensible en fonction de ses regional settings (sachant que VB ajuste seul parfois), tant mieux. Si la donnée n'est pas celle qu'il désire, tant pis pour lui...
Pas de Format$(Value, "0.00") ou pire : Format$(Now, "dd/mm/YYYY") c'est une faute grave. Utiliser FormatNumber et FormatDateTime (idem, avec FormatCurrency).
par contre, si tu génères un INI, ou tout autre sauvegarde du genre (textuel), on enregistre au format internationnal.
dernière chose, dans ton code, quand on modifie un textbox, le curseur n'est pas forcément a la fin...
dans ta form, je tapes 122
zut, je voulais ecrire 12,32
je décale mon caret, je tape ma virgule, et hop, mon curseur reviens en fin.
17 juil. 2008 à 21:33
If Right$(Text1.Text, 1) "0" Or Right$(Text1.Text, 1) "1" Or _ Right$(Text1.Text, 1) "2" Or Right$(Text1.Text, 1) "3" _ Or Right$(Text1.Text, 1) "4" Or Right$(Text1.Text, 1) "5" _ Or Right$(Text1.Text, 1) "6" Or Right$(Text1.Text, 1) "7" _ Or Right$(Text1.Text, 1) "8" Or Right$(Text1.Text, 1) "9" _ Or Right$(Text1.Text, 1) "." Or Right$(Text1.Text, 1) "-" Then
par...
if instr("0123456789.-",Right$(Text1.Text, 1)) then
?
ça fait une petite économie ;)
17 juil. 2008 à 00:30
tu te fiches des paramètres régionnaux. tu en cible des particuliers, voilà tout. tu interdis la frappe d'une virgule "," au profit d'un "."
Pourquoi ?
Sur un poste anglais, un type voulant placer des séparateurs des milliers se retrouveras avec des séparateurs décimaux... bel exemple d'universalité ^^
Les utilisateurs ont certains paramètres regionnaux, respectes les, c'est a ton programme de s'adapter (tu dois même faire le contraire que ce que tu fais, avec le pavé numérique : substituer une ',' au '.', si les regional settings l'exigent).
tu parles des fonctions de Cast (CSng, CDbl et CCur, principalement)
Elles utilisent, elles, les regional settings.
par contre, Val ou Str$ sont celles que l'on doit utiliser pour aller de/vers un format internationnal.
le controle de la saisie est effectivement un point sensible. mais il faut le faire bien.
comme pour les dates...
l'idée est de laisser l'utilisateur faire comme il lui semble.
Il devrait jouer avec ses regional settings.
On teste alors avec IsNumeric, voir s'il a fait n'importe quoi...
on peut alors utiliser CSng ou CDbl, pour obtenir notre donnée décimale.
Si IsNumeric renvoie False, on peut être tolérants, et tenter de jouer avec Val.
Au pire, il n'aura pas la valeur qu'il souhaitait... il aurait du faire gaffe ^^
Idem avec IsDate... fais confiance a l'utilisateur. Si la donnée est compréhensible en fonction de ses regional settings (sachant que VB ajuste seul parfois), tant mieux. Si la donnée n'est pas celle qu'il désire, tant pis pour lui...
Pas de Format$(Value, "0.00") ou pire : Format$(Now, "dd/mm/YYYY") c'est une faute grave. Utiliser FormatNumber et FormatDateTime (idem, avec FormatCurrency).
par contre, si tu génères un INI, ou tout autre sauvegarde du genre (textuel), on enregistre au format internationnal.
dernière chose, dans ton code, quand on modifie un textbox, le curseur n'est pas forcément a la fin...
dans ta form, je tapes 122
zut, je voulais ecrire 12,32
je décale mon caret, je tape ma virgule, et hop, mon curseur reviens en fin.
pas top ...