代码之家  ›  专栏  ›  技术社区  ›  taji01

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

  •  -1
  • taji01  · 技术社区  · 9 年前

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

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

    示例:如果用户键入123456,我希望程序像这样分隔数字123456。

    enter image description here

    3 回复  |  直到 9 年前
        1
  •  2
  •   taji01    9 年前

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

        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;
            }
        }
    
        2
  •  1
  •   Richard Schneider    9 年前

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

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

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

        3
  •  1
  •   ShawsWii    3 年前

    我知道已经很晚了,但试试这个,它会解决你的问题

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