我正在尝试查看用户是否按下了文本框中的小数点分隔符,并根据其他参数允许或禁止它。
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 enumeration ,您提到的值 46 对应于 DEL(删除)键(即 Num Lock 关闭时的点)。
关于c# - 如何检测 KeyDown 事件中的 NumberDecimalSeparator (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/206608/