机房收费系统—解决子窗体最小化时,程序一关闭VB就崩溃问题
前言??不知道大家有没有出现过这样的问题,当子窗体是最小化状态时,点击主窗体右上角的[×]按钮,或者直接关闭该子窗体时,VB就会停止运行。曾经这个问题一度困扰了我,但是原系统这样操作确确实实是没有问题的。 解决方法??在解决这个问题之前,先来一些准备工作。 Form_QueryUnload()的具体用法Private Sub Form_QueryUnload(Cancel As Integer,UnloadMode As Integer)
?Cancel:一个整数,将此参数设定为除 0 以外的任何值,可停止 QueryUnload 事件,并阻止该窗体和应用程序的关闭。如果取值为0,则该窗体将被关闭。
代码??因为我发现如果子窗体是正常状态的话,直接关闭主窗体,或者直接关闭该子窗体,VB是不会停止运行的。所以,我就想到了在卸载父窗体之前先让子窗体最大化,然后再卸载掉子窗体。 Private Sub MDIForm_QueryUnload(Cancel As Integer,UnloadMode As Integer)
Dim f As Form
For Each f In Forms
'如果该窗体是最小化状态
If f.Name <> FrmMain.Name And f.WindowState = 1 Then
'让窗体最大化或正常
f.WindowState = 2
Unload f
End If
Next
End Sub
??这样就解决了在子窗体是最小化状态时,关闭父窗体时VB会停止运行的问题。同上,在各个子窗体的Form_QueryUnload事件中,如果子窗体是最小化状态,那就先让子窗体最大化。 Private Sub Form_QueryUnload(Cancel As Integer,UnloadMode As Integer)
If Me.WindowState = 1 Then
Me.WindowState = 2
End If
End Sub
Form_Unload()事件中怎么中断该过程??一般我们在一个过程中,如果想提前退出这个过程的话,只要在你想要停止的地方写一个 Exit Sub 就可以了,可是当我把它写进Form_unload事件中时,却发挥不了作用了。 Private Sub Form_Unload(Cancel As Integer)
??当把其中的Cancel参数设置成0以外的数字或者让Cancel等于True时,那么就可以取消窗体卸载。 Private Sub Form_Unload(Cancel As Integer)
a = MsgBox("您是否确定退出?",vbOKCancel + vbExclamation + 0,"退出")
'如果点击“确定”按钮,则Cancel=1
If a = 1 Then
Cancel = 1
'否则,Cancel = 0
else
Cancel = 0
End If
Sub
??当初,我不知道要这样做,就是没有熟悉窗体的卸载过程以及它的用法,没有明白过程中的参数是怎么回事。当我们不知道一个过程怎么使用的时候,可以先百度一下过程之中参数的用法,或许就会明白了。 Form_Terminate()??关于这个事件的具体用法,小编就不知道了。我只是知道它发生在Form_Unload事件之后,而且不可以中断卸载。如果大家知道怎么使用的话,还请不吝赐教。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |