Использование маски телефона в TextBox с WPFC#

Место общения программистов C#
Ответить
Anonymous
 Использование маски телефона в TextBox с WPF

Сообщение Anonymous »

У меня есть окно, содержащее это текстовое поле: Как видите, я вызываю метод PhoneTextBox_TextChanged, который имеет следующий код:

Код: Выделить всё

private void PhoneTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var textBox = sender as TextBox;
var text = textBox.Text.Replace("(", "").Replace(")", "").Replace(" ", "").Replace("-", "");

if (text.Length > 11)
text = text.Substring(0, 11);

if (text.Length >= 6)
textBox.Text = $"({text.Substring(0, 2)}) {text.Substring(2, 5)}-{text.Substring(7)}";
else if (text.Length >= 2)
textBox.Text = $"({text.Substring(0, 2)}) {text.Substring(2)}";
else if (text.Length >= 1)
textBox.Text = $"({text}";

textBox.CaretIndex = textBox.Text.Length; // Mover o cursor para o final
}
Изначально код может корректно форматироваться до пятого числа... начиная с шестого, приложение вылетает со следующим сообщением:

System.ArgumentOutOfRangeException: 'Индекс и длина должны относиться к местоположению
в строке. Arg_ParamName_Name'

Сообщение об ошибке указывает на второе условие, выполняющее логику:

Код: Выделить всё

textBox.Text = $"({text.Substring(0, 2)}) {text.Substring(2, 5)}-{text.Substring(7)}";
Как решить эту проблему? Ожидаемый мной результат: (99) 99999-9999.

Подробнее здесь: https://stackoverflow.com/questions/790 ... x-with-wpf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»