在做机房收费系统的过程中,遇到的这样一个问题:在想关闭父窗体时,我们一般情况下会先判断我们是否真要退出,会弹出提示框,当我们看到提示框时,我们又不想退出了,但这是如果我们用的是unload事件驱动,就会出现一个问题,父窗体没有退出,所有的子窗体却全部退出了,这是我们很郁闷!其实这个问题很容易解决!
原因: unload事件会先卸载子窗体,后卸载父窗体,而queryunload恰与之相反
queryunload事件:
在一个窗体或应用程序关闭之前发生。当一个 MDIForm 对象关闭时,QueryUnload事件先在 MDI 窗体发生,然后在所有 MDI子窗体中发生。如果没有窗体取消 QueryUnload 事件,该 Unload事件首先发生在所有其它窗体中,然后再发生在 MDI 窗体中。当一个子窗体或一个 Form对象关闭时,在那个窗体中的 QueryUnload 事件先于该窗体的 Unload事件发生。
语法
Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)
Private Sub MDIForm_QueryUnload(cancel As Integer, unloadmode As Integer)
说明
此事件的典型用法是在关闭一个应用程序之前用来确保包含在该应用程序中的窗体中没有未完成的任务。例如,如果还未保存某一窗体中的新数据,则应用程序会提示保存该数据。
当一个应用程序关闭时,可使用 QueryUnload 或 Unload事件过程将 Cancel 属性设置为 True来阻止关闭过程。但是,QueryUnload 事件是在任一个卸载之前在所有窗体中发生,而 Unload是在每个窗体卸载时发生。
unload事件:
当窗体从屏幕上删除时发生。当那个窗体被重新加载时,它的所有控件的内容均被重新初始化。当使用在 Control菜单中的 Close 命令或 Unload语句关闭该窗体时,此事件被触发。
语法:
Private Sub object_Unload(cancel As Integer)
说明:
将 cancel设置为任何非零的值可防止窗体被删除,但不能阻止其它事件,诸如从 Microsoft Windows操作环境中退出等。可用 QueryUnload 事件阻止从 Windows中的退出。
在窗体被卸载时,可用一个 Unload事件过程来确认窗体是否应被卸载或用来指定想要发生的操作。也可在其中包括任何在关闭该窗体时也许需要的验证代码或将其中的数据储存到一个文件中。
QueryUnload 事件在 Unload事件之前发生。Unload 事件在 Terminate事件之前发生。
使用 Unload语句或在一个窗体的“控件”菜单上选择“关闭”命令,用“任务窗口”列表上的“结束任务”按钮退出应用程序,在当前窗体为其一个子窗体的情况下关闭该 MDI窗体,或当应用程序正在运行的时候退出 Microsoft Windows 操作环境等情况都可引发 Unload 事件。
作者信息(http://gelupu.blog.163.com/)