0

我在 VB.Net 中创建了一个应用程序。使用 Showdialog() 方法显示子窗体,以便在关闭子窗体之前无法访问父窗体。

我需要在每次关闭子表单时对其进行处理,以便删除其中包含的信息:为此,我在子表单的关闭事件中放置了“Me.Dispose()”。

但是,通常(并非总是)当孩子关闭时,父母会被最小化,这不是我想要的。

有谁知道有什么方法可以阻止这种情况发生?感谢所有帮助。

4

2 回答 2

2

更好的方法是将模态窗口包装在 using 语句中,而不是在表单的关闭事件中使用 Me.Dispose。例如,在您的父表单中执行以下操作:

Using frm As New Form1
    frm.ShowDialog()
End Using
于 2012-11-29T13:06:03.080 回答
1

但是,通常(不总是)当孩子关闭时,父母会被最小化

它没有被最小化,它消失在另一个应用程序的窗口后面。调试时最常见的是 Visual Studio。这里的问题是在 Winforms 有机会重新启用您的主窗口之前过早地破坏了表单。Windows 窗口管理器现在被迫寻找另一个窗口来关注。您的应用程序中没有一个窗口符合条件,因为它们仍然被禁用,因此它会选择另一个应用程序的窗口。如果该窗口足够大(“并非总是”情况),那么它将与您的窗口重叠并使其消失,使您认为它已最小化。

您可以通过正确的方式解决此问题,在ShowDialog 返回后处理对话框。始终使用 Using 语句来执行此操作。样板代码是:

Using dlg = New YourDialogFormClass
    If dlg.ShowDialog() = DialogResult.Ok Then
        '' Use the dialog results
        ''...
    End If
End Using    '' <=== It gets disposed here
于 2012-11-29T13:22:26.337 回答