C # WPF - форматировать число с запятыми при наборе текста в текстовом поле - PullRequest
0 голосов
/ 21 ноября 2018

Предположим, есть это текстовое поле, и когда пользователь вводит 4000 , как только будет введен последний ноль, текстовое поле должно отображать 4000 Если пользователь вводит, 2030040 , должно отображаться 2,030,040 с добавлением запятых в реальном времени.Я хочу сделать это в проекте WPF C #.Я добавил следующий код, чтобы пользователь мог вводить только цифры и десятичные точки в текстовом поле. txtAmount - имя текстового поля.

private void txtAmount_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    e.Handled = !char.IsDigit(e.Text.Last()) && !(e.Text.Last() == '.');
}

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018
private void UIElement_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            var textBox = (TextBox)sender;
            var currentText = textBox.Text;

            if (currentText.Length + 1 < 3) return;

            if ((textBox.GetDigitsCount()) % 3 == 0 && currentText.Length != 2)
            {
                textBox.Text = !textBox.HasAnyCommas() 
                    ? currentText.Insert(1, ",") 
                    : textBox.Text.Insert(textBox.Text.Length - 2, ",");
            }

            textBox.SelectionStart = textBox.Text.Length;
        }


public static class Ex
    {
        public static int GetDigitsCount(this TextBox @this) => @this.Text.Count(char.IsDigit);
        public static bool HasAnyCommas(this TextBox @this) => @this.Text.Any(x => x == ',');
    }
0 голосов
/ 21 ноября 2018

Помимо вашего обработчика предварительного ввода текста, вам нужно будет привязать текстовое поле к переменной int / long вместе со строковым форматом

<TextBox DockPanel.Dock="Top" Text="{Binding Value, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:#,0}}" 
         PreviewTextInput="TextBox_PreviewTextInput"
         />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...