instrucciones - A medida que el usuario escribe: separe los números con comas y formatéelo en moneda en C#
A continuación se muestra el enfoque básico, cuando el texto cambia, conviértalo en un decimal y luego cambie el texto a la representación de cadena del decimal.
textBox1.TextChanged += (s,e) =>
{
var value = Decimal.Parse(textBox1.Text);
textBox1.Text = value.ToString("C");
}
También debe verificar el número ilegal en textBox. Eche un vistazo a Decimal.TryParse
.
Sobre la investigación encontré este código. Este código hizo exactamente lo que yo quería.
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;
}
}