事件处理程序触发器 System.StackOverflowException

Event Handler triggers System.StackOverflowException

代码:

 private void addExcel(object sender, TextChangedEventArgs e)
 {
        if (!textBox.Text.Contains('!'))
        {
            textBox.Text += "!";
        }
        StringBuilder sb = new StringBuilder();
        sb.Append(textBox.Text);
        sb.Remove(textBox.Text.IndexOf('!'), 1);
        textBox.Text = sb.ToString();
 }

异常发生在sb.ToString(); 此应用程序应该计算阶乘。

我假设这是在您的 TextBox.TextChanged 事件中调用的。发生这种情况时:textBox.Text = sb.ToString(); 它添加了一个没有“!”的 string到文本框,然后更改,然后触发事件,然后:

if (!textBox.Text.Contains('!'))
        {
            textBox.Text += "!";
        }

添加一个“!”,然后触发再次删除的事件。永远!

最好的办法是将 sb.ToString() 分配给另一个变量,而不是文本框。