【问题标题】:Winforms ShowDialog(this) blocks the switching windows of other applications to the foregroundWinforms ShowDialog(this) 阻止其他应用程序的切换窗口到前台
【发布时间】:2018-03-16 08:57:16
【问题描述】:

当我在我的 Winforms 应用程序中打开任何对话框时,Windows 10 会以以下方式出现奇怪的行为:

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

我用

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

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

我已经阅读了大约 50 篇相关文章,唯一的问题似乎是设置了 TopMost 或未使用父表单调用 ShowDialog。我不是普通的 Winforms 开发人员,所以我可能在做一些愚蠢的事情。这让我发疯,所以我非常感谢任何帮助!

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

【问题讨论】:

    标签: c# winforms showdialog


    【解决方案1】:

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

    【讨论】:

    • 父窗体是被屏蔽的,应用程序内的模态行为没有问题。问题是对话框打开时其他应用程序/Windows 的行为不正常。
    【解决方案2】:

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

    lstList.ContextMenu = myContextMenu;
    

    我删除该关联后,ShowDialog 不再阻止 ALT-TAB。

    【讨论】:

      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 2021-11-25
      • 2012-10-23
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多