web-dev-qa-db-ja.com

小数点区切りを検出

現在のウィンドウ設定で小数点を検出する必要があります。私は、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";
            }
        } 
    }
38

溶液:

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';
        }
57
Andres

実際に使用する必要があります

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator

の代わりに

CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

2番目の設定を使用すると、OSのデフォルト設定が得られます。これは、このPCにログインした特定のユーザーアカウントのユーザーの地域ロケールとは異なる場合があります。

23
user1826054

whileループを使用すべきではありません。アプリケーションをフリーズします。代わりにifを使用してください。問題はここにある可能性があります

1
ppetrov