首页 文章

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

提问于
浏览
0

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

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

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

有谁知道有什么方法可以阻止这种情况发生?所有帮助表示赞赏 .

2 回答

  • 1

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

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

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

    它没有被最小化,它消失在另一个应用程序的窗口后面 . 最常见的是调试时的Visual Studio . 这里出现的问题是你在Winforms有机会重新启用主窗口之前销毁了表单 too early . Windows窗口管理器现在被迫找到另一个窗口来聚焦 . 您的应用中的所有窗口都没有资格,因为它们仍处于禁用状态,因此它会选择另一个应用的窗口 . 如果那个窗口足够大("not always"情况)那么它将与你的重叠并使它消失,让你认为它被最小化了 .

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

    Using dlg = New YourDialogFormClass
        If dlg.ShowDialog() = DialogResult.Ok Then
            '' Use the dialog results
            ''...
        End If
    End Using    '' <=== It gets disposed here
    

相关问题