vb.net - showdialog()将主窗口发送到后台

时间:2013-10-11 14:39:12

标签: vb.net focus modal-dialog

我有一个模态窗口弹出窗口,所以我的应用程序的用户可以编辑一些东西,然后他们保存它并关闭窗口。当他们关闭弹出窗口时,我的父(主)窗口被发送到我桌面上所有其他应用程序的后面,然后它立即被发送回前面。

知道为什么会这样吗?

4 个答案:

答案 0 :(得分:2)

以您的主要形式:

   Dim frmDlg as New FormDialogToShow
   frmDlg.ShowDialog(Me)

主表单不应该发送到后面。子对话框将显示在父对象的顶部。如果没有所有者引用,主表单有时会被发送到后面。当您没有指定所有者表单时,会发生这种情况:

   Dim frmDlg as New FormDialogToShow
   frmDlg.ShowDialog()
   Me.BringToFront

(答案与第一次相同)

答案 1 :(得分:0)

这段代码似乎解决了这个问题:

' When closing the subform
' ------------------------
sub_form.close()
main.focus()
sub_form.dispose()

执行此操作时,即使子窗体是模态窗口,我的主窗体也不会被发送到后面。

答案 2 :(得分:0)

ShowDialog行结束之前,你的模态形式是否以某种方式隐藏起来?这发生在我身上,并且能够通过从模态表单中删除Hide调用来解决它。

我想我在这里读到的地方是因为Windows没有启用窗口将焦点发送到活动应用程序中,所以它会将焦点发送到下一个应用程序。

答案 3 :(得分:0)

我拼命地寻找类似问题的答案。我发现这个特别有用:

Private Sub Frm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    Prompting = False

    Frm = Nothing
    FrmPrompt.Close()

    FrmPrompt.Dispose()
    FMain.Activate()
End Sub

激活允许我的主表单不被发送到我打开的任何其他内容之后。