.Net如何阻止处置模态子表单以最小化父表单?

时间:2012-11-29 12:44:56

标签: .net vb.net winforms idisposable

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

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

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

有没有人知道如何阻止这种情况发生?感谢所有帮助。

2 个答案:

答案 0 :(得分:2)

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

Using frm As New Form1
    frm.ShowDialog()
End Using

答案 1 :(得分: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