Свойства длины текста MaskedTextBox возвращают одно и то же значение

У меня есть MaskedTextBox со следующей маской

MaskedTextBox.Mask = @"000\.000\.000\.000";

Для теста я создаю textBox, где я показываю длину текста, написанного в MaskedTextBox. Сначала я добавляю EventHandler:

MaskedTextBox.TextChanged += new EventHandler(MaskedTextBoxTextChanged);

и напишите тестовую функцию для обработки поведения MaskedTextBox:

private void MaskedTextBoxTextChanged(object sender, EventArgs e)
{
   MaskedTextBox mtb = sender as MaskedTextBox;
   TextBox.Text = mtb.Text.Length.ToString();
}

Результат совсем нехороший, потому что, когда я набираю первый символ в MaskedTextBox слева, свойства длины должны быть равны 1. Это не 1, а 12, и это число увеличивается после 12 позиции. Как исправить этот баг? Более того, я пытаюсь заполнить этот MaskedTextBox нулевым символом после вызова метода MaskedTextBoxTextChanged и хочу использовать свойства Text.Length.


person ElConrado    schedule 05.05.2015    source источник
comment
Я отредактировал ваш заголовок. См. Должны ли вопросы включать «теги» в свои заголовки?, если нет единого мнения, не следует.   -  person John Saunders    schedule 06.05.2015


Ответы (1)


Во-первых, длина вашей строки будет 15, а не 12 (для строки учитываются разделители).

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

Однако длина на самом деле не имеет значения, поскольку ваша маска подразумевает, что все элементы являются цифрами, и ни один из них не является необязательным. Следовательно, это НЕ допустимый ввод, если значения не предоставлены для всех элементов.

Если вы маскируете ввод для получения числа, вам может потребоваться сначала преобразовать его в числовой тип данных, чтобы выполнить любую обработку, которую вы выполняете (чего мы не знаем).

person Brendan Green    schedule 06.05.2015
comment
Я пытаюсь обработать IP-адрес. Когда я набираю на входе 127, у меня 127. . . вывод, чем System.Net.IPAddress.TryParse, возвращает false, потому что это недопустимый IP-адрес. Когда я набираю 127 (вывод 127...), чем заполняю пробел нулями, я получаю правильное значение IP. - person ElConrado; 06.05.2015
comment
Вот что TypeValidationCompleted (msdn.microsoft.com/en-us/library/) и MaskInputRejected (msdn.microsoft.com/en-us/library/) предназначены для. - person Brendan Green; 07.05.2015