用户输入:用逗号分隔数字,并在C#中将其格式化为货币

时间:2015-09-20 02:16:24

标签: c# .net winforms textbox currency

我有一个名为textBox1的文本框。

目标:一旦用户输入textBox1,我希望程序将数字转换为货币格式。

示例:如果用户键入123456,我希望程序将数字123,456分开。

enter image description here

3 个答案:

答案 0 :(得分:1)

我知道已经晚了,但试试这个应该可以解决你的问题

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text.Length > 0)
            {
                textBox1.Text = Convert.ToDouble(textBox1.Text).ToString("N0");
                textBox1.SelectionStart = textBox1.Text.Length;
            }
        }

答案 1 :(得分:0)

下面是基本方法,当文本更改将其转换为小数时,然后将文本更改为小数的字符串表示。

textBox1.TextChanged += (s,e) =>
{
   var value = Decimal.Parse(textBox1.Text);
   textBox1.Text = value.ToString("C");
}

您还应该检查textBox中的非法号码。看看Decimal.TryParse

答案 2 :(得分:0)

经过研究,我发现了这段代码。这段代码完全符合我的要求。

    private void form_3_Load(object sender, EventArgs e)
    {
        textBox1.Text = "$0.00";
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        ///
        //Remove previous formatting, or the decimal check will fail including leading zeros
        string value = textBox1.Text.Replace(",", "")
            .Replace("$", "").Replace(".", "").TrimStart('0');
        decimal ul;
        //Check we are indeed handling a number
        if (decimal.TryParse(value, out ul))
        {
            ul /= 100;
            //Unsub the event so we don't enter a loop
            textBox1.TextChanged -= textBox1_TextChanged;
            //Format the text as currency
            textBox1.Text = string.Format(CultureInfo.CreateSpecificCulture("en-US"), "{0:C2}", ul);
            textBox1.TextChanged += textBox1_TextChanged;
            textBox1.Select(textBox1.Text.Length, 0);
        }
        bool goodToGo = TextisValid(textBox1.Text);
        btn_test.Enabled = goodToGo;
        if (!goodToGo)
        {
            textBox1.Text = "$0.00";
            textBox1.Select(textBox1.Text.Length, 0);
        }
        ///
    }

    private bool TextisValid(string text)
    {
        Regex money = new Regex(@"^\$(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$");
        return money.IsMatch(text);
    }


    void tb_TextChanged(object sender, EventArgs e)
    {
        //Remove previous formatting, or the decimal check will fail
        string value = textBox1.Text.Replace(",", "").Replace("$", "");
        decimal ul;
        //Check we are indeed handling a number
        if (decimal.TryParse(value, out ul))
        {
            //Unsub the event so we don't enter a loop
            textBox1.TextChanged -= tb_TextChanged;
            //Format the text as currency
            textBox1.Text = string.Format(CultureInfo.CreateSpecificCulture("en-US"), "{0:C2}", ul);
            textBox1.TextChanged += tb_TextChanged;
        }
    }