我的应用程序中没有断点,但有时Visual Studio在没有理由的情况下获得焦点。 (在调试模式下或不在调试模式下)(就像有一个断点)
可能是什么原因?
答案 0 :(得分:2)
如果由于您手动设置了断点或者因为应用程序抛出异常或遇到其他一些意外错误而导致调试器没有中断,最可能的解释是您的应用程序放弃了焦点。
例如,您销毁当前具有焦点的窗口,并且在设置之前位于前景中,该窗口将焦点转移到应用程序中的另一个窗口。然后,因为某些窗口总是必须具有焦点,所以窗口管理器将激活设置为下一个可用窗口,该窗口恰好是Visual Studio拥有的窗口。结果效果就像按 Alt + Tab 。
Raymond Chen有一篇博客文章,The correct order for disabling and enabling windows:
如果您已完成模态对话框,那么您的诱惑就是按以下顺序进行清理:
- 销毁模态对话框。
- 重新启用所有者。
但是如果你这样做,你会发现前台激活不会回到你的主人那里。相反,它会进入一些随机的其他窗口。明确地将激活设置为目标所有者“修复”了问题,但是你仍然拥有所有闪烁,并且入侵者窗口的Z顺序全部搞砸了。
发生了什么事?
当你破坏模态对话框时,你正在通过前景激活来破坏窗口。窗口管理器现在需要找到其他人来激活。它试图将它提供给对话框的所有者,但是所有者仍然被禁用,因此窗口管理器会跳过它并查找其他窗口,即未被禁用的窗口。
这就是你得到奇怪的闯入者窗口的原因。
销毁模态对话框的正确顺序是
- 重新启用所有者。
- 销毁模态对话框。
这一次,当模态对话框被销毁时,窗口管理器会向所有者查找,而这次它已启用,因此它继承了激活。
没有闪烁。没有闯入者。