L'appel
CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator
obtient le séparateur décimal pour la culture d'interface utilisateur actuelle. Vous pouvez utiliser d'autres cultures pour obtenir le séparateur pour d'autres langues.
EDIT
A partir de 166 cultures qui sont rapportées dans mon système (CultureInfo.GetCultures(CultureTypes.SpecificCultures).Count()
), il semble que seuls deux séparateurs sont utilisés: point et la virgule. Vous pouvez essayer cela dans votre système:
var seps = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(ci => ci.NumberFormat.NumberDecimalSeparator)
.Distinct()
.ToList();
En supposant que cela est vrai, cette méthode peut être utile (noter que le keyCode
est avec le drapeau OU logique modifiers
afin d'éliminer les combinaisons non valides):
private bool IsDecimalSeparator(Keys keyCode, Keys modifiers)
{
Keys fullKeyCode = keyCode | modifiers;
if (fullKeyCode.Equals(Keys.Decimal)) // value=110
return true;
string uiSep = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator;
if (uiSep.Equals("."))
return fullKeyCode.Equals(Keys.OemPeriod); // value=190
else if (uiSep.Equals(","))
return fullKeyCode.Equals(Keys.Oemcomma); // value=188
throw new ApplicationException(string.Format("Unknown separator found {0}", uiSep));
}
Une dernière note: Selon Keys enumeration, la valeur 46 que vous mentionnez correspond à la touche DEL (Delete) (c'est-à-dire le point où le verrouillage numérique est désactivé).
Cela ne répond pas à la question lors de l'examen: "Le NumberdecimalSeparator renvoie 46, ou". " sur mon système américain Beaucoup d'autres pays utilisent ',' comme séparateur L'événement KeyDown met le KeyValue à 190 quand j'appuie sur le point. " ... comme indiqué dans la question. –