检测小数分隔符

时间:2013-01-25 00:38:17

标签: c# globalization

我必须在当前窗口设置中检测小数点分隔符。我使用visual studio 2010,windows窗体。特别是,如果DecimalSeparator是逗号,如果用户在textbox1中输入点,我需要在textbox2中显示零。

我尝试使用此代码,但不起作用:

private void tbxDaConvertire_KeyPress(object sender, KeyPressEventArgs e)
    {
        string uiSep = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator;
        if (uiSep.Equals(","))
        {
            while (e.KeyChar == (char)46)
            {
                tbxConvertito.Text = "0";
            }
        } 
    }

我也尝试过这段代码,但不能正常工作:

private void tbxDaConvertire_KeyPress(object sender, KeyPressEventArgs e)
    {
        string uiSep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
        if (uiSep.Equals(","))
        {
            if (e.KeyChar == (char)46)
            {
                tbxConvertito.Text = "0";
            }
        } 
    }

3 个答案:

答案 0 :(得分:53)

解决方案:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        char a = Convert.ToChar(Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator);
        if (e.KeyChar == a)
        {
            e.Handled = true;
            textBox1.Text = "0";
        }
    }

希望有所帮助。这样,当你点击“。”或“,”您的文本框将为0

编辑:

如果要在每次点击小数分隔符时插入0,则为代码:

char a = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
        if (e.KeyChar == a)
        {
            e.KeyChar = '0';
        }

答案 1 :(得分:22)

其实你应该使用

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator

而不是

CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

使用第二个提供的操作系统默认设置可能与登录到此PC的特定用户帐户的用户区域设置不同

答案 2 :(得分:1)

你不应该使用while循环,我认为它会冻结应用程序,而是使用if,问题可能就在这里