c# - 为什么在 WinForms (.NET) 中隐藏拥有的窗口切换应用程序?

标签 c# .net linux winforms

我有一个覆盖屏幕的应用程序窗口,还有几个默认隐藏的小工具窗口,它们的“所有者”属性设置到这个主窗口。

当我显示一个工具窗口并单击其中一个按钮时,它会隐藏自己以显示另一个窗口。当我隐藏另一个工具窗口时,Windows 会像按 alt+tab 一样切换应用程序。防止这种情况的唯一方法是在关闭(隐藏)工具窗口之前单击主应用程序窗口。

为什么会发生应用程序切换以及如何防止这种情况发生?好吧,我可以明确地告诉那些窗口将主窗口前面隐藏起来(我还没有尝试过,但我不喜欢这样做。)这只有在 Owner 属性设置在那个窗口上时才会发生,以防止它们不会显示在主窗口后面。

ps:这个全屏应用程序是一个游戏,那些窗口是菜单和设置屏幕等...

最佳答案

模糊的问题,我无法重现,之前也没有听说过。当 Windows 窗口管理器被迫寻找另一个窗口以在当前窗口关闭时提供焦点时,此行为是正常的。并且该应用程序没有任何已启用的窗口。在您的应用程序中不应该是这种情况,除非您在工具窗口获得焦点时有意将主窗口的 Enable 属性设置为 False。在不同的线程上运行窗口是一个长期的解释。

可以尝试将工具窗口的 ShowInTaskbar 属性设置为 false,这样用户必须始终通过主窗口来重新聚焦应用程序。并确保窗口只因 MouseUp 事件而关闭,这样鼠标捕获就不会把事情搞砸了。并且,是的,在 FormClosing 事件中明确聚焦主窗口。

关于c# - 为什么在 WinForms (.NET) 中隐藏拥有的窗口切换应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363128/

相关文章:

c# - 使用 Linq Select 将实体映射到 DTO 的最简洁方法?

c# - 在一段代码中暂停 GC

.net - 在缓存外生成原生图像

c# - 登录前握手时出错

linux - 无法在 CentOS 6 上使用绑定(bind)绕过网关

javascript - 如何在 ASP.NET 中显示消息框?

c# - 查找出现次数最多的日期范围

c# - System.Diagnostics.Stopwatch 在 Elapsed... 属性中返回负数

linux - 在 unix 中使用 bash 恢复已删除的文件

linux - 为什么我无法在基于 Linux 的系统上 native 运行 .exe 文件?