Исключение переполнения стека при попытке назначить строку для текстового поля - PullRequest
0 голосов
/ 30 июня 2019

У меня есть простое текстовое поле TextChanged событие, которое проверяет строку, введенную пользователем в поле.

private void Phone_TextChanged(object sender, TextChangedEventArgs e)
{
     string phone = Phone.Text;
     if (phone.Length > 2 && phone.Length < 6)
     {
          string digit = Convert.ToString(phone[phone.Length - 1]);
          bool isNumeric = int.TryParse(digit, out int n);
          if (!isNumeric)
          {
               phone = phone.Substring(0, phone.Length - 1);
               Phone.Text = phone;
          }
      }
}

Но когда я пытаюсь его скомпилировать, я получаю System.StackOverflowException в строке Phone.Text = phone;. Я попытался изменить Substring() на Remove(), но у меня все еще есть эта ошибка. Понятия не имею, в чем проблема.

1 Ответ

4 голосов
/ 30 июня 2019

Ответ есть в самом вашем вопросе. Вы изменяете текст в конце метода, который снова вызывает метод измененного текста и будет продолжать делать это бесконечно. Это приводит к исключению переполнения стека. Это то, что компилятор получает из вашего кода, и, следовательно, вызывает исключение во время компиляции.

Я предлагаю вам обработать событие до изменения текста и не допускать попадания недопустимого текста в текстовое поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...