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";
    }
}

そうすれば、ヒットしたとき、.またはTextBox,に aが表示されます。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

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

[ドキュメント]を指摘してくれた berhirとGrimmの功績

于 2016-02-11T10:33:53.207 に答える
1

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

于 2013-01-25T00:46:08.257 に答える