Звонок
CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator
получает десятичный разделитель для текущей культуры пользовательского интерфейса. Вы можете использовать другие культуры, чтобы получить разделитель для других языков.
EDIT
Из 166 культур, о которых сообщалось в моей системе (CultureInfo.GetCultures(CultureTypes.SpecificCultures).Count()
), кажется, что используются только два разделителя: точка и запятая. Вы можете попробовать это в вашей системе:
var seps = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(ci => ci.NumberFormat.NumberDecimalSeparator)
.Distinct()
.ToList();
Предполагая, что это правда, этот метод может быть полезен (обратите внимание, что keyCode
имеет ИЛИ с флагом modifiers
для исключения недопустимых комбинаций):
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));
}
Последнее примечание: в соответствии с Перечисление ключей указанное вами значение 46 соответствует клавише DEL (Удалить) (т. Е. Точке, когда Num Lock выключен).