【发布时间】:2011-01-14 19:51:09
【问题描述】:
问题:如果对话框是子窗体,则会引发对话框的 FormClosing() 事件,即它的 Owner 属性设置为父窗体,但如果它是子窗体则不会。所以关闭主窗体不会调用任何孙子对话框的关闭事件。
详细信息:对话框提示“保存更改?”,在 FormClosing() 事件中带有 YesNoCancel 按钮。单击“取消”使对话框保持打开状态,即取消关闭。
Private Sub Dialog_FormClosing(...) Handles Me.FormClosing
If MessageBox.Show("Save Changes?", YesNoCancel) = No Then
e.Cancel = True
End If
End Sub
因此实例化一个新对话框,并设置其 Owner 属性...
// called from the main form
Dim dlg As New Dialog
dlg.Owner = Me
dlg.Show()
... 的好处是,如果用户尝试关闭所有者/父级,对话框将提示保存。单击“取消”将使对话框保持打开状态,它的所有者也是如此。
但是,如果相同的对话框是从 父级的子级(也设置了它的所有者属性)而不是父级显示的:
// called from another child
Dim dlg As New Dialog
dlg.Owner = Me
dlg.Show()
如果最上面的父级已关闭,则不会引发子级的 FormClosing() 事件。
这是框架中已知的设计限制吗?在我开始为此破解一个讨厌的解决方案之前,我应该考虑什么?
感谢您的任何回复。
【问题讨论】: