我之前已经问过这个问题,但我一定不能说清楚,因为据我所知,答案结果并不正确..所以这里再说一次。
我有一个VB6应用程序..它有主菜单打开表格和对话框(不是MDI,我不认为)
我希望在应用程序关闭时保存任何打开的表单或对话框的位置,以便下次打开应用程序时,将恢复位置。
我希望当我关闭应用程序时,任何queryUnload,unload,terminate都会触发' child'窗户或对话框,我可以保存他们的位置..但似乎什么都没有。
我在所有上述事件中都设置了断点,但当我关闭应用程序时,没有任何事情被击中。
VB6不是我常用的演出..所以我可能想的太多.net ..
有没有办法可以在VB6中完成..
编辑:所以,如果我点击右上角的近十字架,我就会结束'应用程序。在VB6中是否有一种方法可以编辑这种行为,因此我可以煽动优雅的关闭?
答案 0 :(得分:1)
所有3个事件都会触发,但是当您预期时,可能不会触发Terminate事件。
创建一个包含1个MDI表单,1个MDI子表单,1个普通表单的测试项目,并添加以下代码:
MDI表单:
'MDI form : name=MDIForm1
Option Explicit
Private Sub MDIForm_Click()
End
End Sub
Private Sub MDIForm_Load()
Form1.Show
Form2.Show vbModeless, Me
WindowState = vbMaximized
End Sub
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox "MDI form QueryUnload event"
End Sub
Private Sub MDIForm_Terminate()
MsgBox "MDI form Terminate event"
End Sub
Private Sub MDIForm_Unload(Cancel As Integer)
MsgBox "MDI form Unload event"
End Sub
MDI孩子:
'1 form: name=Form1 MDIChild=true
Option Explicit
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox "MDI child QueryUnload event"
End Sub
Private Sub Form_Terminate()
MsgBox "MDI child Terminate event"
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox "MDI child Unload event"
End Sub
正常形式:
'1 form: name=Form2
Option Explicit
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox "Form2 QueryUnload event"
End Sub
Private Sub Form_Terminate()
MsgBox "Form2 Terminate event"
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox "Form2 Unload event"
End Sub
您将看到QueryUnload和Unload事件被触发(按此顺序),但是当您关闭MDI表单时会触发Terminate事件。
当您点击MDI表单的背景时,将调用End
并且不会触发任何事件
答案 1 :(得分:1)
“儿童”表格确实得到了常见的事件。请注意,在Form_QueryUnload
UnloadMode
参数为vbFormOwner
。
“Child”表单以explcit所有者形式显示,如下所示:
'--- using global references
Form2.Show vbModal, Form1
Form3.Show , Form1 '--- Form3 is modeless
'--- using instances
With New Form2
.Show vbModal, oOwnerForm
End With
With New Form3
.Show , oOwnerForm
End With