当用户键入时:用逗号分隔数字,并在 C# 中将其格式化为货币
As the user types: Separate numbers with commas, and format it into currency in C#
我有一个名为 textBox1 的文本框。
目标:只要用户在 textBox1 中键入内容,我就希望程序将数字转换为货币格式。
示例:如果用户键入 123456,我希望程序像这样分隔数字 123,456。
下面是基本的做法,当文本发生变化时将其转换为小数,然后将文本更改为小数的字符串表示。
textBox1.TextChanged += (s,e) =>
{
var value = Decimal.Parse(textBox1.Text);
textBox1.Text = value.ToString("C");
}
您还应该检查文本框中的非法数字。看看Decimal.TryParse
.
经过研究,我发现了这段代码。这段代码完全符合我的要求。
private void form_3_Load(object sender, EventArgs e)
{
textBox1.Text = "[=10=].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 = "[=10=].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;
}
}
我知道已经晚了,但试试这个应该可以解决您的问题
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;
}
}
我有一个名为 textBox1 的文本框。
目标:只要用户在 textBox1 中键入内容,我就希望程序将数字转换为货币格式。
示例:如果用户键入 123456,我希望程序像这样分隔数字 123,456。
下面是基本的做法,当文本发生变化时将其转换为小数,然后将文本更改为小数的字符串表示。
textBox1.TextChanged += (s,e) =>
{
var value = Decimal.Parse(textBox1.Text);
textBox1.Text = value.ToString("C");
}
您还应该检查文本框中的非法数字。看看Decimal.TryParse
.
经过研究,我发现了这段代码。这段代码完全符合我的要求。
private void form_3_Load(object sender, EventArgs e)
{
textBox1.Text = "[=10=].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 = "[=10=].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;
}
}
我知道已经晚了,但试试这个应该可以解决您的问题
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;
}
}