4

3桁のグループごとに「、」を追加したい。例:123456789と入力すると、テキストボックスに123,456,789と表示され、次のコードで取得できます。

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (!string.IsNullOrEmpty(textBox1.Text))
    {
        System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
        decimal valueBefore = decimal.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowThousands);
        textBox1.Text = String.Format(culture, "{0:N0}", valueBefore);
        textBox1.Select(textBox1.Text.Length, 0);
    }
}

このフォーマットについてもっと具体的にしたいと思います。このテキストボックスにのみ数値を入力し、次のように10進形式(その後は。と入力)を使用したいので、123,456,789.00次のコードを使用しようとします。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
    {
        e.Handled = true;
    }
}

しかし、それは機能しません

4

2 に答える 2

0

http://msdn.microsoft.com/en-us/library/fzeeb5cd.aspx#Y600

値を 10 進データ型に解析した後、textbox1.Textを使用してその 10 進変数の値を割り当て、ToStringそれをフォーマット パラメーターに渡します。

TextBox1.Text = valueBefore.ToString("C")

テキストボックスへの入力を防ぐ限り、そのためのモードがすでにあると確信していました。

とにかく、これを試してください:

if !(Char.IsControl(e.KeyChar) || Char.IsDigit(e.KeyChar) || (e.KeyChar == Keys.Decimal && !(TextBox1.Text.Contains("."))))
{
    e.Handled = true;
}
于 2012-10-14T18:51:24.593 に答える
0

MSDNで定義されているように、数字のグループ化形式の文字列を使用できます 。次のようなものが機能するはずです (修正版):

private void textBox1_TextChanged(object sender, EventArgs e)
{
    decimal myValue;
    if (decimal.TryParse(textBox1.Text, out myValue))
    {
        textBox1.Text = myValue.ToString("N", CultureInfo.CreateSpecificCulture("en-US"));
        textBox1.SelectionStart = 0;
        textBox1.SelectionLength = 0;
    }
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != '.')
    {
        e.Handled = true;
    }           
}
于 2012-10-14T18:34:39.727 に答える