2015-09-20 34 views

回答

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

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

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

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

+0

我在textchange方法下试过这段代码,但是它似乎给了我(s,e)的红色错误行@Richard Schnider – taji01

+0

糟糕忘了'=>' –

+0

嗨,这对我没有用。代码仍然给我一个错误。该代码正确地上升到两位数然后(错误:var value = Decimal.Parse(textBox1.Text);)在此行上。 @理查德施耐德 – taji01

相关问题