当前位置:  开发笔记 > 编程语言 > 正文

如何检测KeyDown事件中的NumberDecimalSeparator(C#)

如何解决《如何检测KeyDown事件中的NumberDecimalSeparator(C#)》经验,为你挑选了1个好方法。

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

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

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



1> Panos..:

电话

CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

获取当前用户界面文化的小数分隔符.您可以使用其他文化来获取其他语言的分隔符.


编辑

从我的系统(CultureInfo.GetCultures(CultureTypes.SpecificCultures).Count())中报告的166种文化中,似乎只使用了两个分隔符:句点和逗号.您可以在系统中尝试:

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枚举,您提到的值46对应于DEL(删除)键(即Num Lock为OFF时的点).

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有