我想在每组3位数之后添加“,”。例如:当我输入123456789时,文本框将显示123,456,789,我用这段代码得到它:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (!string.IsNullOrEmpty(textBox1.Text))
{
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
decimal valueBefore = decimal.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowThousands);
textBox1.Text = String.Format(culture, "{0:N0}", valueBefore);
textBox1.Select(textBox1.Text.Length, 0);
}
}
我想更具体地说明这种格式。我想只为这个文本框键入数字并使用十进制格式(类型。之后),如123,456,789.00
,我尝试使用此代码:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
}
但它不起作用
答案 0 :(得分:0)
您可以使用MSDN中定义的数字分组格式字符串 像下面这样的东西应该工作(修改版):
private void textBox1_TextChanged(object sender, EventArgs e)
{
decimal myValue;
if (decimal.TryParse(textBox1.Text, out myValue))
{
textBox1.Text = myValue.ToString("N", CultureInfo.CreateSpecificCulture("en-US"));
textBox1.SelectionStart = 0;
textBox1.SelectionLength = 0;
}
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
}
答案 1 :(得分:0)
http://msdn.microsoft.com/en-us/library/fzeeb5cd.aspx#Y600
将值解析为十进制数据类型后,只需使用textbox1.Text
为该{十进制变量值>分配ToString
,并将格式参数传递给它。
TextBox1.Text = valueBefore.ToString("C")
至于阻止对文本框的输入,我当然认为已经存在一种模式。
无论如何,试试这个:
if !(Char.IsControl(e.KeyChar) || Char.IsDigit(e.KeyChar) || (e.KeyChar == Keys.Decimal && !(TextBox1.Text.Contains("."))))
{
e.Handled = true;
}