Events VB6关闭父窗体时,卸载查询加载或终止子窗体中的事件

Events VB6关闭父窗体时,卸载查询加载或终止子窗体中的事件,events,vb6,terminate,Events,Vb6,Terminate,我以前问过这个问题,但我一定不是很清楚,因为据我所知答案并不正确。。又来了 我有一个VB6应用程序。。它有打开窗体和对话框的主菜单(我不认为是MDI) 我想在应用程序关闭时保存任何打开的窗体或对话框的位置,以便下次打开应用程序时,这些位置将恢复 我希望当我关闭应用程序时,QueryLoad、unload、terminate中的任何一个都会在“子”窗口或对话框中触发,我可以保存它们的位置。。但似乎什么也没有发生 我已经在上述所有事件上设置了断点,但是当我关闭应用程序时,没有任何结果 VB6不是我通

我以前问过这个问题,但我一定不是很清楚,因为据我所知答案并不正确。。又来了

我有一个VB6应用程序。。它有打开窗体和对话框的主菜单(我不认为是MDI)

我想在应用程序关闭时保存任何打开的窗体或对话框的位置,以便下次打开应用程序时,这些位置将恢复

我希望当我关闭应用程序时,QueryLoad、unload、terminate中的任何一个都会在“子”窗口或对话框中触发,我可以保存它们的位置。。但似乎什么也没有发生

我已经在上述所有事件上设置了断点,但是当我关闭应用程序时,没有任何结果

VB6不是我通常的工作。。所以我可能想得太多了

有没有一种方法可以在VB6中实现这一点


编辑:因此,如果我单击右上角的闭合十字,我似乎会“结束”应用程序。在VB6中是否有方法编辑此行为,以便我可以发起优雅的关闭?

所有3个事件都会触发,但终止事件可能不会在您期望的时候触发

创建一个包含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
'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
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
'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
范式:

'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
'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
您将看到QueryLoad和Unload事件被激发(按此顺序),但Terminate事件在您关闭MDI表单时被激发

当您单击MDI表单的后台时,将调用
End
,并且不会触发任何事件

“子”表单不会获取通常的事件。请注意,在
Form\u QueryUnload
上,
UnloadMode
参数是
vbFormOwner

“子”表单与解释所有者表单一起显示,如下所示:

'--- 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

如何关闭应用程序?是否在任何地方使用“结束”按钮?保存窗口位置时,请记住,无论窗体是最大化、最小化还是正常,都需要保存。只有在正常情况下,才应保存该位置。这可能很棘手。我通常在调整大小事件中保存值,而不是在关闭时保存,以确保获得“良好”值。呃。。“结束”。。这就是Hrqls单击MDI父项的含义吗。。在我的语言中,右上角的标准闭合十字。那样的话,我就必须这样做。。这就是为什么我没有被解雇。