文本框显示格式

时间:2011-10-06 07:06:21

标签: c# winforms textbox formatting

我想在每组3位数之后添加“,”。例如:当我键入3000000时,文本框将显示3,000,000,但值仍为3000000 我尝试使用maskedtexbox,有一个缺点是maskedtexbox显示的数字类似于 _ ,__ __

5 个答案:

答案 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("#,#");