VB6关闭父窗体时,请在子窗体中卸载queryunload或终止事件

时间:2014-09-30 05:24:15

标签: events vb6 terminate

我之前已经问过这个问题,但我一定不能说清楚,因为据我所知,答案结果并不正确..所以这里再说一次。

我有一个VB6应用程序..它有主菜单打开表格和对话框(不是MDI,我不认为)

我希望在应用程序关闭时保存任何打开的表单或对话框的位置,以便下次打开应用程序时,将恢复位置。

我希望当我关闭应用程序时,任何queryUnload,unload,terminate都会触发' child'窗户或对话框,我可以保存他们的位置..但似乎什么都没有。

我在所有上述事件中都设置了断点,但当我关闭应用程序时,没有任何事情被击中。

VB6不是我常用的演出..所以我可能想的太多.net ..

有没有办法可以在VB6中完成..

编辑:所以,如果我点击右上角的近十字架,我就会结束'应用程序。在VB6中是否有一种方法可以编辑这种行为,因此我可以煽动优雅的关闭?

2 个答案:

答案 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