我在WinForms中遇到了问题。我创建了一个MDIParent-Form并在MDIParent的Load事件中调用ChildForm。我希望当ChildForm关闭时,MDIParent也会关闭并退出应用程序。因此,我在MDIParent中为ChildForm编写了一个事件,以便在ChildForm关闭时,MDIParent将触发FormClosed事件。但是它抛出了一个堆栈溢出异常。我知道这是一个无限循环,但我不知道原因...
private void MDIParent1_Load(object sender, EventArgs e)
{
Form1 childForm = new Form1();
childForm.MdiParent = this;
childForm.FormClosed += childForm_FormClosed;
childForm.Show();
}
void childForm_FormClosed(object sender, FormClosedEventArgs e)
{
this.Close();
//{Cannot evaluate expression because the current thread is in a stack overflow state.}
}
但是如果我使用
Application.Exit();
使用 this.Close()
时出现问题,但如果使用其他方式就可以正常工作。我想知道为什么,请问有人能解释一下吗?
更新:我在没有 MDIParent 的情况下尝试了相同的操作,一切都正常了...但为什么使用 MDIParent 就会出现问题呢?
this.Close()
时,它会在所有子窗体上调用 close,从而调用childForm_FormClosed
,这就是您的无限递归吗?我几乎可以确定 Memphy 的解释是正确的。 - MariusUt