Wezwanie
CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator
dostaje separator dziesiętny dla bieżącej kultury interfejsu użytkownika. Możesz użyć innych kultur, aby uzyskać separator dla innych języków.
EDIT
Od 166 kultur, które zostały zgłoszone w moim systemie (CultureInfo.GetCultures(CultureTypes.SpecificCultures).Count()
), wydaje się, że wykorzystywane są tylko dwa separatory: okres i przecinek. Można spróbować tego w systemie:
var seps = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(ci => ci.NumberFormat.NumberDecimalSeparator)
.Distinct()
.ToList();
Zakładając, że to prawda, ta metoda może być pomocna (zauważ, że keyCode
jest ALTERNATYWA z flagą modifiers
w celu wyeliminowania nieprawidłowych kombinacji):
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));
}
Ostatnia uwaga: Według Keys enumeration, wartość 46, o której wspomniałeś, odpowiada klawiszowi DEL (Delete) (tj. Punktowi, w którym Num Lock jest WYŁĄCZONY).
Nie odpowiada na pytanie: "Funkcja NumberdecimalSeparator zwraca wartość 46 lub". " w moim systemie w USA Wiele innych krajów używa "," jako separatora Zdarzenie KeyDown ustawia KeyValue na 190, kiedy naciskam kropkę. " ... jak napisano w pytaniu. –