我想在每组3位数之后添加“,”。例如:当我键入3000000时,文本框将显示3,000,000,但值仍为3000000 我尝试使用maskedtexbox,有一个缺点是maskedtexbox显示的数字类似于 _ ,__ , __ 。
答案 0 :(得分:6)
尝试将此代码添加到KeyUp
TextBox
事件处理程序中
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (!string.IsNullOrEmpty(textBox1.Text))
{
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
int valueBefore = Int32.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowThousands);
textBox1.Text = String.Format(culture, "{0:N0}", valueBefore);
textBox1.Select(textBox1.Text.Length, 0);
}
}
是的,它会更改存储在texbox中的值,但是只要您需要实际的数字,就可以使用以下行从文本中获取它:
int integerValue = Int32.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowThousands);
当然不要忘记检查用户输入文本框的内容实际上是一个有效的整数。
答案 1 :(得分:1)
使用String.Format
int value = 300000
String.Format("{0:#,###0}", value);
// will return 300,000
http://msdn.microsoft.com/en-us/library/system.string.format.aspx
答案 2 :(得分:1)
这可能适用于我希望的场景。
private string text
{
get
{
return text;
}
set
{
try
{
string temp = string.Empty;
for (int i = 0; i < value.Length; i++)
{
int p = (int)value[i];
if (p >= 48 && p <= 57)
{
temp += value[i];
}
}
value = temp;
myTxt.Text = value;
}
catch
{
}
}
}
private void digitTextBox1_TextChanged(object sender, EventArgs e)
{
if (myTxt.Text == "")
return;
int n = myTxt.SelectionStart;
decimal text = Convert.ToDecimal(myTxt.Text);
myTxt.Text = String.Format("{0:#,###0}", text);
myTxt.SelectionStart = n + 1;
}
此处,myTxt =您的文本框。设置下面给出的Textchanged事件,并在帖子中创建属性文本。
希望它有所帮助。
答案 3 :(得分:0)
你可以像这样挂钩OnKeyUp事件:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (!(e.KeyCode == Keys.Back))
{
string text = textBox1.Text.Replace(",", "");
if (text.Length % 3 == 0)
{
textBox1.Text += ",";
textBox1.SelectionStart = textBox1.Text.Length;
}
}
}
答案 4 :(得分:0)
获取十进制值然后设置
DecimalValue.ToString("#,#");