Форматирование отображения текстового поля - PullRequest
2 голосов
/ 06 октября 2011

Я хочу добавить "," после каждой группы из 3 цифр. Например: когда я набираю 3000000, в текстовом поле будет отображаться 3 000 000, но значение по-прежнему равно 3000000.
Я пытался использовать maskedtexbox, есть недостаток, что maskedtexbox отображал число вроде _ , __ , __ .

Ответы [ 5 ]

6 голосов
/ 06 октября 2011

Попробуйте добавить этот код в 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);
    }
}

Да, это изменит значение, хранящееся в текстовом поле, но всякий раз, когда вам нужно фактическое число, вы можете использоватьследующая строка, чтобы получить его из текста:

int integerValue = Int32.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowThousands);

Конечно, не забудьте проверить, что то, что пользователь вводит в текстовое поле, является действительным целым числом.

1 голос
/ 06 октября 2011

Надеюсь, это может работать нормально для вашего сценария.

 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 = ваше текстовое поле. Установите событие Textaged, как указано ниже, и создайте текст свойства, как в сообщении.

Надеюсь, это поможет.

1 голос
/ 06 октября 2011

Использовать 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

0 голосов
/ 17 декабря 2016

Получить десятичное значение, затем установить

DecimalValue.ToString("#,#");
0 голосов
/ 06 октября 2011

Вы можете подключиться к событию 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;
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...