【问题标题】:Stack overflow exception on trying to assign a string to textbox尝试将字符串分配给文本框时出现堆栈溢出异常
【发布时间】:2019-06-30 18:06:02
【问题描述】:

我有一个简单的文本框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;
          }
      }
}

但是当我尝试编译它时,我在Phone.Text = phone; 线上得到了System.StackOverflowException。我尝试将Substring() 更改为Remove(),但仍然出现此错误。我不知道是什么问题。

【问题讨论】:

    标签: c# wpf events input text


    【解决方案1】:

    答案就在你的问题本身。您正在更改方法末尾的文本,这会再次触发 text changed 方法,并将无休止地继续这样做。所以它会导致堆栈溢出异常。这是编译器从您的代码广告中得到的,因此会引发编译时异常。

    我建议您在文本更改之前处理该事件,并且首先不要让无效文本进入文本框。

    【讨论】:

    • 顺便说一句,这也可以通过分离事件处理程序,更改文本,然后重新附加事件处理程序来完成。
    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多