我想關閉我的主窗體(父窗體)時關閉子表單。但是,這給了我一個StackOverflow異常。關閉我的表單時出現StackOverflow
但是,如果我在FormClosed事件上調用_child.Dispose,它將按預期工作。我應該這樣做嗎?我爲什麼要調用Dispose? (因爲.Show(的),它不應該是neceserry權
小演示:
public partial class frmChild : Form
{
public frmChild()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
public partial class frmParent : Form
{
private frmChild _child;
public frmParent()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
_child = new frmChild();
_child.FormClosed += child_FormClosed;
_child.Show(this);
}
void child_FormClosed(object sender, FormClosedEventArgs e)
{
//_child.Dispose(); <-- uncomment and it works
this.Close(); // <-- StackOverflow exception
}
}
的解決方案,通過泰奧曼Soygul(評論以供將來參考):
關閉主窗體具有 this.Close();信號的所有子 窗口關閉,以便使得 創建無限循環
在父母中調用this.Close()之後,它會發信號通知所有孩子關閉aswel,這將發送另一個FormClosed事件... 我解決了它沒有指定所有者在_child.Show();
我沒有使用所有者無論如何。
不,這將再次給我一個StackOverflowException 。 – RvdK 2011-05-25 13:04:54
@Roy,用另外的支票更新了建議。 – 2011-05-25 13:08:02
小孩的FormClosed被解僱,但如果我在frmParent中致電close,父母的FormClosed會被解僱(不是孩子)。那麼這怎麼可能是一個無限循環? – RvdK 2011-05-25 13:11:22