【问题标题】:VB6 When closing the Parent form do unload queryunload or terminate events fire in Child FormsVB6 关闭父窗体时,请在子窗体中卸载 queryunload 或终止事件
【发布时间】:2014-09-30 05:24:14
【问题描述】:

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

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

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

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

我在上述所有事件上都设置了断点,但是当我关闭应用程序时,什么都没有受到影响。

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

有没有办法在VB6中做到这一点..

编辑:所以如果我点击右上角的关闭十字,我似乎“结束”了应用程序。 VB6 中有没有办法编辑这种行为,以便我可以优雅地关闭?

【问题讨论】:

  • 如何关闭应用程序?你在任何地方都使用“end”吗?
  • 在保存窗口位置的时候,记住还需要保存窗体是最大化、最小化还是正常。只有在正常时才应保存位置。这可能很棘手。我通常将值保存在调整大小事件中,而不是在关闭时保存,以确保获得“好的”值。
  • Er .. "End" .. 这就是 Hrqls 通过单击 MDI 父级的意思 .. 在我的语言中,右上角的标准关闭十字。在这种情况下,我必须这样做......这就是为什么我没有触发任何事件。

标签: events vb6 terminate


【解决方案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 事件被触发(按此顺序),但 Terminate 事件在您关闭 MDI 表单时触发。

当你点击MDI窗体的背景时,会调用End,不会触发任何事件

【讨论】:

    【解决方案2】:

    “子”表单确实获得了通常的事件。注意Form_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
    

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      相关资源
      最近更新 更多