58

我必须在当前的 Windows 设置中检测小数点分隔符。我使用的是 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";
            }
        } 
    }
4

3 回答 3

84

解决方案:

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';
}
于 2013-01-25T01:15:26.810 回答
39

实际上你应该使用

CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator

代替

CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

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

感谢berhirGrimm指出[docs]

于 2016-02-11T10:33:53.207 回答
1

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

于 2013-01-25T00:46:08.257 回答