我正在尝试查看用户是否在文本框中按了小数点分隔符,并根据其他参数允许或禁止它.
NumberdecimalSeparator返回46或'.' 在我的美国系统上.许多其他国家使用','作为分隔符.当我按下句点时,KeyDown事件将KeyValue设置为190.
我只是继续寻找逗号/句号,还是有更好的方法?
电话
CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator
获取当前用户界面文化的小数分隔符.您可以使用其他文化来获取其他语言的分隔符.
编辑
从我的系统(CultureInfo.GetCultures(CultureTypes.SpecificCultures).Count()
)中报告的166种文化中,似乎只使用了两个分隔符:句点和逗号.您可以在系统中尝试:
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)); }
最后一点:根据Keys枚举,您提到的值46对应于DEL(删除)键(即Num Lock为OFF时的点).