我正在尝试查看用户是否已在文本框中按下小数点分隔符,并根据其他参数允许还是禁止它。

NumberdecimalSeparator返回为46或“。”。在我的美国系统上。许多其他国家/地区使用','作为分隔符。当我按下句点时,KeyDown事件将KeyValue设置为190。

我只是继续寻找逗号/句点,还是有更好的方法?

最佳答案

通话

CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

获取当前用户界面区域性的小数点分隔符。您可以使用其他区域性来获取其他语言的分隔符。

编辑

从我系统中报告的166种文化(CultureInfo.GetCultures(CultureTypes.SpecificCultures).Count())中,似乎只使用了两个分隔符:句点和逗号。您可以在系统中尝试以下操作:
var seps = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
            .Select(ci => ci.NumberFormat.NumberDecimalSeparator)
            .Distinct()
            .ToList();

假设这是真的,此方法可能会有所帮助(请注意,keyCodemodifiers标志进行了“或”运算,以消除无效组合):
    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处于OFF的点)。

09-27 08:41