MODIFICATION DU SÉPARATEUR DÉCIMAL SANS LES API JSUTE AVEC LE FRAMEWORK .NET

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 5 oct. 2004 à 08:51
leroi10desanges Messages postés 3 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 23 décembre 2010 - 23 déc. 2010 à 14:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26570-modification-du-separateur-decimal-sans-les-api-jsute-avec-le-framework-net

leroi10desanges Messages postés 3 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 23 décembre 2010
23 déc. 2010 à 14:01
j ai un ptit problem
apre l ajout de champ; j ai un bouton pour modifier le champ mais c champ prond la valour de la bas de donne avec vigrule apre la modification ca march pas par ce que c chaom avec la virgul mais apre changer le vergule avec le point ca march bien

voila ;
je voudrez un code pour charger la virgul avec le poit au cas de clique sur modifier
merci
cordialment
Mutos Messages postés 103 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 14 mai 2010
15 févr. 2006 à 16:10
Bonjour,


Au fait, juste un petit commentaire, on peut bien modifier la culture de l'application en cours en quelques petites lignes sous .Net, sans toucher le moins du monde au règlage de la machine.

Le code ci-dessous :
' Imports needed to change application culture
Imports System.Globalization ' For Thread
Imports System.Threading ' For CultureInfo
' Change culture to force decimal "." even if the machine has ","
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")

Il force la culture de l'application en anglais US, quel que soit le règlage de la machine, exactement ce dont j'avais besoin...


@+

Benoît 'Mutos' ROBIN
http://hoshikaze.net
rdesbiens Messages postés 3 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 19 octobre 2010
15 févr. 2006 à 15:27
Bonjour, J'ai essayé votre petite applciation. Ca fonctionne . sauf que lorsque je fais un update SQL, si j'ai la virgule comme séparateur dans le panneau de configuration ca fonctionne, mais si je met le point cela ne fonctionne pas même si je modifie le separateur avec une virgule a partir de votre fonction.
CMD1.CommandText "UPDATE form_suivi SET [durée] " & Txtdurée.Text
commmit ect
J'ai l'erreur "erreur de syntaxe dans l'instruction update"

Merci
Mutos Messages postés 103 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 14 mai 2010
27 déc. 2005 à 05:31
Bonjour,


J'ai le même problème, une appli (éditeur de systèmes stellaires) qui fait une exception sur des constantes en "." lorsqu'elle se trouve sur une machine en ",", je souhaiterai qu'elle fonctionne quel que soit le séparateur de la machine. Alors j'ai commencé à lire le post... Et après SPY166, en un an, plus de nouvelles, déçu !

Je me demande si l'on ne peut pas modifier uniquement la culture de l'application sans toucher à celle de la machine ?


@+

Benoît 'Mutos' ROBIN
http://hoshikaze.net
spy166 Messages postés 207 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 29 mars 2006
28 nov. 2004 à 13:12
Ah ben oui je suis bête
DonCastor Messages postés 9 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 10 janvier 2005
27 nov. 2004 à 17:27
la virgule qui sépare les unité des décimales dans les tableurs excel par exemple.
Tu peux soit avoir une virugule pour une convention française, soit avoir un point pour une convention americaine ou anglaise...

J'espere avoir répondu a ta question!
spy166 Messages postés 207 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 29 mars 2006
5 oct. 2004 à 18:57
Salut, c'est quoi ce que vous appelez séparateur décimal ?
DonCastor Messages postés 9 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 10 janvier 2005
5 oct. 2004 à 10:01
Ben justement, le séparateur reste inchangé tout le temps de l'appli ( évidemment ce la depends où tu appelle ce code ).

Le seul problème qui subsiste est que je ne peux pas rentrer dans le panneu de config avec ce code, docn je suis en train de mixer celui la avec celui de l'api kernel32 on va voir ce que ca donne!

merci pour ton commentaire
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
5 oct. 2004 à 08:51
Et si tu redemandes le séparateur décimal courant après ta manipulation, cela fonctionne ?

Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator()

Moi aussi j'avais essayé de le faire par le framework, mais cela ne fonctionnais pas, probablement parceque je n'avais pas les droits requis. De plus, c'était pour que OWC 9 fonctionne, or OWC est un controle ActiveX, il n'est donc pas lié à la culture courante de l'appli .net : conclusion : je continue à passer par les API et cela marche bien... mais il y a toujours le risque de perturber une autre appli tourant en meme temps, mais bon...

voici ma fonction :

#Region "Gestion séparateur décimal"

Public Declare Function SetLocaleInfo% Lib "kernel32" Alias "SetLocaleInfoA" ( _
ByVal Locale%, ByVal LCType%, ByVal lpLCData$)
Public Declare Function GetSystemDefaultLCID% Lib "kernel32" ()

Public Function bChangerSeparateurDecimal(Optional ByRef sSepDecimalImpose$ = ".", _
Optional ByRef bRetablir As Boolean = False) As Boolean

' On peut lire le séparateur decimal au lancement du programme,
' mais on n'arrive pas à lire le séparateur actuel après changement
Dim sSepDecimalActuel$ = Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator()

Dim lCodePage_LCID%, lRet% ' Long en VB6
' Code du séparateur décimal : decimal separator
Const lLOCALE_SDECIMAL% = 14

' Conserver le séparateur décimal actuel
Static bChangementEffectif As Boolean
Static sPrecedentSepDecimal$
If sPrecedentSepDecimal "" Then sPrecedentSepDecimal sSepDecimalActuel

' Forcer le séparateur décimal (par exemple ".")
Dim lFalse& = 0
If Not bRetablir And sSepDecimalActuel <> sSepDecimalImpose Then
lCodePage_LCID = GetSystemDefaultLCID() ' Lire le code page actuel
lRet = SetLocaleInfo(lCodePage_LCID, lLOCALE_SDECIMAL, sSepDecimalImpose)
If lRet = lFalse Then Exit Function
bChangementEffectif = True
' Ce code ne marche pas, car l'instance est en lecture seule
'Try
' Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator = sSepDecimalImpose
' bChangementEffectif = True
'Catch ex As Exception
' Exit Function
'End Try
End If

' Rétablir le précédent séparateur décimal avant l'appel à cette fonction
If bRetablir And bChangementEffectif Then
lCodePage_LCID = GetSystemDefaultLCID() ' Lire le code page actuel
lRet = SetLocaleInfo(lCodePage_LCID, lLOCALE_SDECIMAL, sPrecedentSepDecimal)
If lRet = lFalse Then Exit Function
bChangementEffectif = False
End If

bChangerSeparateurDecimal = True

End Function

#End Region
Rejoignez-nous