我在VB.Net中创建了一个应用程序 . 使用Showdialog()方法显示子表单,以便在子项关闭之前无法访问父表单 .
我需要在每次关闭时处理子表单,以便删除它包含的信息:为此,我在子表单的结束事件中放置了“Me.Dispose()” .
然而,经常(并非总是)当孩子关闭时,父母被最小化,这不是我想要的 .
有谁知道有什么方法可以阻止这种情况发生?所有帮助表示赞赏 .
更好的方法是将模态窗口包装在using语句中,而不是在窗体的结束事件中使用Me.Dispose . 例如,在您的父表单中执行以下操作:
Using frm As New Form1 frm.ShowDialog() End Using
但是,经常(并非总是)当孩子关闭时,父母会被最小化
它没有被最小化,它消失在另一个应用程序的窗口后面 . 最常见的是调试时的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
2 回答
更好的方法是将模态窗口包装在using语句中,而不是在窗体的结束事件中使用Me.Dispose . 例如,在您的父表单中执行以下操作:
它没有被最小化,它消失在另一个应用程序的窗口后面 . 最常见的是调试时的Visual Studio . 这里出现的问题是你在Winforms有机会重新启用主窗口之前销毁了表单 too early . Windows窗口管理器现在被迫找到另一个窗口来聚焦 . 您的应用中的所有窗口都没有资格,因为它们仍处于禁用状态,因此它会选择另一个应用的窗口 . 如果那个窗口足够大("not always"情况)那么它将与你的重叠并使它消失,让你认为它被最小化了 .
你可以通过正确的方式解决这个问题,在ShowDialog返回后处理对话框 . 始终使用Using语句来执行此操作 . 锅炉板代码是: