Forms.Owner 在子窗体的FormClosed事件中使用This.Owner.Close();怎么会报错,这样不是把父窗体关掉了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 this.Owner.Close();如果Owner是主窗口的话,它关闭了程序就退出了。直接Application.Exit();即可。 Owner是主窗体我想在子窗体中用this.Owner.Close();关闭父窗体 但是报错 StackOverflowException 出现在未知模块难道是在子窗体中关闭父窗体,但是因为又要先关闭子窗体才能关闭父窗体,而子窗体的代码又没运行完,卡在this.Owner.Close();上,所以溢出错误吗?高手解释下 委托的实现如下:在子窗体中定义一个委托和事件public delegate void CloseEventHandler(object sender, EventArgs e);public event CloseEventHandler CloseEvent;然后在子窗体的Form_Closing事件中通知父窗体: if (this.CloseEvent != null) { this.CloseEvent(sender, new EventArgs()); }父窗体在创建子窗体时,监听子窗体的这个事件是否发生,如果发生,就关闭自己: Form2 childForm = new Form2(); childForm.CloseEvent += new Form2.CloseEventHandler(childForm_CloseEvent); childForm.Show(); private void childForm_CloseEvent(object sender, EventArgs e) { this.Close(); } 其实你已经知道大概原因了。父窗体的Close时会先关闭所有子窗体,当然就引发子窗体的FormClosed事件,但你在这个事件中又执行了父窗体的Close方法,导致子窗体的FormClosed事件不断的触发,没有结束的条件就堆栈溢出了。 你可以在Owner.Close()方法执行前将自己的FormClosed事件 -= 掉 你的想法是对的,其实你这么一试就知道了。1、你不去关闭子窗体,而是关闭父窗体,这个时候父窗体会自动去关闭子窗体,也就说会触发子窗体的Form_Closed事件2、你在子窗体Form_Closed事件中去关闭父窗体时,引用了this.Owner,其实这个时候子窗体的this已经不能访问了。 回8楼的观点2.虽然窗体关闭了,部分资源也释放了,this.Owner仍可以访问的。代码实验下。 求三撇注释!标题要长一点,要不看不到的对么(*^__^*) 。 辅线程更新窗体的问题,该问题困扰几个月了 C#数据导出到EXCEL,WPS和所有格式 请问一下,0:30:30和21:57:28,怎样比较大小呢 SQL2000 [新手请教]关于获取ListView控件中的值! 我的CPU是AMD的,是不是不可以装vs.net2003啊? 有关 string.Split() 求救. 调用C++DLL问题 分布式程序怎样读取数据最好? 如何用钩子实现两个程序间消息传递,没分了,都给了 openoffice xMergedCells如例实例化
如果Owner是主窗口的话,它关闭了程序就退出了。
直接Application.Exit();即可。
我想在子窗体中用this.Owner.Close();
关闭父窗体
但是报错 StackOverflowException 出现在未知模块
难道是在子窗体中关闭父窗体,但是因为又要先关闭子窗体才能关闭父窗体,而子窗体的代码又没运行完,卡在this.Owner.Close();上,所以溢出错误吗?
高手解释下
public delegate void CloseEventHandler(object sender, EventArgs e);
public event CloseEventHandler CloseEvent;
然后在子窗体的Form_Closing事件中通知父窗体:
if (this.CloseEvent != null)
{
this.CloseEvent(sender, new EventArgs());
}父窗体在创建子窗体时,监听子窗体的这个事件是否发生,如果发生,就关闭自己: Form2 childForm = new Form2();
childForm.CloseEvent += new Form2.CloseEventHandler(childForm_CloseEvent);
childForm.Show();
private void childForm_CloseEvent(object sender, EventArgs e)
{
this.Close();
}
父窗体的Close时会先关闭所有子窗体,当然就引发子窗体的FormClosed事件,但你在这个事件中又执行了父窗体的Close方法,导致子窗体的FormClosed事件不断的触发,没有结束的条件就堆栈溢出了。
你的想法是对的,其实你这么一试就知道了。
1、你不去关闭子窗体,而是关闭父窗体,这个时候父窗体会自动去关闭子窗体,也就说会触发子窗体的Form_Closed事件
2、你在子窗体Form_Closed事件中去关闭父窗体时,引用了this.Owner,其实这个时候子窗体的this已经不能访问了。
虽然窗体关闭了,部分资源也释放了,this.Owner仍可以访问的。代码实验下。