Winforms ShowDialog(this)阻止其他应用程序切换到前台

时间:2018-03-16 08:57:16

标签: c# winforms showdialog

当我在Winforms应用程序中打开任何对话框时,Windows 10在这些方面表现得很奇怪:

  1. ALT-TAB不再显示窗口列表
  2. 我无法使用任务栏图标切换到隐藏的应用程序 - 如果我选择当前不可见的窗口的任务栏图标(即使它未被winforms应用程序隐藏),图标只会闪烁然后保持突出显示,但是没有带到前台。我可以使用其他可见的应用程序。一旦我关闭另一个对话框,我就可以正确使用其他应用程序的窗口
  3. 如果我通过点击它切换到winforms应用程序后面的应用程序窗口,我无法通过ALT-TAB或单击任务栏图标返回winforms应用程序。我可以通过最小化其他应用程序来恢复它
  4. 我用

    打开对话框
    dialogFormName.ShowDialog(this);
    

    TopMost在所有表单上都设置为false,并且未在代码中设置。

    我已经阅读了大约50篇相关文章,唯一的问题似乎是设置了TopMost或者没有使用父窗体调用ShowDialog。我不是一个常规的Winforms开发者,所以我可能做了一些愚蠢的事情。这让我发疯,所以我真的很感激任何帮助!

    编辑:MessageBox.Show也出现了同样的问题(这个"测试")。使用单个按钮调用MessageBox.Show(这个" test")时,新创建的应用程序不会出现此问题。问题应用程序使用EntityFramework,但在添加EF之前没有其他软件包存在问题。

2 个答案:

答案 0 :(得分:0)

Form.ShowDialog()会阻止父表单,直到它关闭为止。 使用Show()单独显示表单而不阻止其父表单。

答案 1 :(得分:0)

在尝试不同的场景后,我终于找到了问题。在我的情况下,我在用户单击ContextMenu上的项目后调用ShowDialog()。 ALT-TAB的阻塞是由以下代码引起的:将ContextMenu附加到ListView,该菜单是上下文的:

lstList.ContextMenu = myContextMenu;

一旦我删除了该关联,ShowDialog就不再阻止ALT-TAB。