Bonjour,
Est-il possible de changer le separateur de saisie decimal a partir d'une application sans demander à l'utilisateur de le modifier dans le panneau de configuration? Si oui comment? Merci.
Bonjour,
Est-il possible de changer le separateur de saisie decimal a partir d'une application sans demander à l'utilisateur de le modifier dans le panneau de configuration? Si oui comment? Merci.
bonjour,
regarde dans la classe CultureInfo, tu peux en créer une et demander à l'utilisateur de créer sa propre culture. c'est pas compliqué du tout.
regarde sur google si tu sais pas.
Tu peux faire simplement ça :Ca récupère la culture en cours (qui dépend des préférences de ton OS, mais que tu peux surcharger : c'est la propriété CurrentCulture) et modifie ses paramètres de formatage de nombre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
C'est sa que j'ai fait Guulh mais cela me genere une erreur en l'executant disant que cette variable est en lecture seul !!
Pour quelle raison dois-tu changer le séparateur ?
Généralement on est confronté à ce problème avec des conversion de valeurs flottantes sous forme d'une chaîne en valeur numérique (float, double, decimal). A ce moment il faut spécifier un IFormatProvider aux méthodes (Parse, TryParse, ...) pour indiquer comment doit se faire la conversion (le séparateur décimal à utiliser notamment).
tu peux t inspirer de ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public static double ToDouble(string sValue) { try { double nValue = 0.0; System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo(); provider.NumberDecimalSeparator = ","; nValue = Convert.ToDouble(sValue, provider); return nValue; } catch { return double.NaN; } }
moi j'utilise l'evenement KeyDown :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 char Separateur = (System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]) if ((e.KeyChar == '.') || (e.KeyChar == ',')) { // Forcer l'ecriture du bon séparateur e.KeyChar = Separateur; }
bellak
C'est deux usages différents.
Soit tu es sur et certain du formatage de ta chaine, (donc que je reçois tjs un nombre a virgule avec une virgule) donc t utilises ma solution.
Soit tu veux permettre a l'utilisateur d'utiliser le point ou la virgule en plus de son caractère régionale de séparation (qui peut etre un | par exemple en bloubikistan //pays imaginaire) et t utilise t'as solution.
De plus je pense que ca genere une exception si on met 2.5 alors que ma methode attend une virgule...
Le fait est qu on ne sait pas a quel moment il veut traiter la decimal (au niveau de l'interface, apres...)
il y a d'ailleurs beaucoup plus simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 // Affiche le code du spérateur décimal courant int c = (int)Application.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; MessageBox.Show(c.ToString()); // Les 4 lignes ci-dessous sont les plus importantes // Change le séparateur en point CultureInfo culture; culture = (CultureInfo)Application.CurrentCulture.Clone(); culture.NumberFormat.NumberDecimalSeparator = "."; Application.CurrentCulture = culture; // Affiche le code du séparateur décimal après modification c = (int)Application.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; MessageBox.Show(c.ToString()); // Tente une conversion d'un décimal avec une virgule try { string d = "12,36"; MessageBox.Show(Double.Parse(d).ToString()); } catch (Exception exc) { MessageBox.Show("Echec normal\n" + exc.Message); }
Partager