事件处理程序触发器 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()
分配给另一个变量,而不是文本框。
代码:
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()
分配给另一个变量,而不是文本框。