Close是关闭窗体的方法,而onclosing是在关闭窗体引用的事件,当窗体close的时候,会触发onclosing事件,一般在onclosing事件中处理关闭窗体时需要做的事情,就onclosing而言,本事并不是关闭窗体,你调用onclosing事件肯定关闭不了。
关闭窗体:close-->onclosing-->onclosed
那为什么直接调用OnClosing方法关不了窗体?调用Close却能
@xmj112288: form.close()方法体中大约是这样的:
close()
{
onclosing(this,e);
if(!e.cancel)
//do closeform
}
这样在调用close后。onclosing事件中可以取消窗口关闭,你直接调用OnClose则根本不会触发close代码
@xmj112288: 这个其实是很简单的问题,建议提问者好好学习下基础知识。
@xmj112288: 就像喝水,拿起杯子没有达到目的,而拿起杯子并把水喝了才是喝水
@hailants: 如果你有这方面(基础知识)的书籍或帖子的话,请推荐下.我是半路出生的,没系统的学过,所以很多你们看来是简单的问题,在我看来搞不明白的还是搞不明白,谢谢
@xmj112288: 去各大文库搜索一下.net开发基础之类的文章看一下。
学习与半路没什么关系,我也是半路,也没有经过系统学习,但是要记得,当遇到一个问题时,不光要知道怎么解,而且要学着知道为什么这么解,以上面的问题为例:你就需要尝试去了解:close和onclosing还有closing事件三个之间是什么关系。进而去深入了解什么是重载、什么是事件,为什么close要通过onclosing方法触发closing事件,这样的设计有什么样的好处……久而久之你的知识就会慢慢延伸组织成一个系统。
当然,如果你想要在这条路上一直走下去,那还是需要系统学习的,但是到那个时候,你系统学习的过程就是将你的知识网进行重组织,补齐其中缺失的地方。
先用后学,用以致学,学以致用……
我觉得C#的事件系统和其他的差不多吧,我晓得我帮不了你,但是你去看一下C#的事件系统,就知道事件发生的顺序和事件的传播,肯定你就有方向了。
OnClosing是winform窗体关闭前的响应事件
OnClose()是直接关闭当前窗体的办法
那为什么直接调用OnClosing方法关不了窗体?调用Close却能
@xmj112288: 因为onclosing只是一个事件,本来并不包括关闭窗体的api,onclosing是告诉使用窗体的相关业务,现在窗体要关闭了,你们还有其他需要做的事情没,如果没有,我就关闭了。这样解释能明白么
楼主成功把所有人都FAINT了。
1、在visual Studio里面,你写 this.OnClosing(new CancelEventArgs(false));直接会报错误的,不是关闭不了,而是编译不了。
2、我大概明白,你可能不想让Onclosing一直都有事件存在,而是在某个时候,不允许窗体关闭。
这种情况在C#里面很好处理的,
Addhandle me.onclosing, address of MyClosingHandle;
大概这样就行了,你想关闭窗体直接 this.close()就行。
可以编译还能运行