我正在使用WinForms.我有2个表格,Form1 (主表格)和Form2 (儿童表格).当用户点击form2顶部的"X"按钮时,我想关闭form1.在我的代码中,我试图通过说法关闭form1,this.Owner.Close();但它会抛出错误.为什么会抛出此错误,以及当用户单击表单顶部的"X"按钮时,如何从子表单中关闭主表单.
错误
System.Windows.Forms.dll中发生了未处理的"System.StackOverflowException"类型异常
表格1
private void btn_Open_Form2_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Owner = this;
frm2.Show();
this.Hide();
}
Run Code Online (Sandbox Code Playgroud)
窗体2
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
this.Owner.Close();
}
Run Code Online (Sandbox Code Playgroud)
当你调用Close所有者的方法时,它会提升自有表单的关闭事件处理程序,这样代码就会产生一个循环,导致堆栈溢出.您需要以这种方式更正代码:
void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if(e.CloseReason!= CloseReason.FormOwnerClosing)
this.Owner.Close();
}
Run Code Online (Sandbox Code Playgroud)
如果要在关闭拥有的表单后关闭应用程序,可以使用:
Application.Exit()
Run Code Online (Sandbox Code Playgroud)
Form2您应该从其所有者拥有的表单(即 Form1)中删除。然后就可以关闭Form1而不会无限循环
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
var form1 = Owner;
form1.RemoveOwnedForm(this);
form1.Close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5048 次 |
| 最近记录: |