【问题标题】:Application doesn't move to front when given focus from Task bar从任务栏获得焦点时,应用程序不会移到前面
【发布时间】:2015-03-19 20:35:17
【问题描述】:

我有一个正在调试中运行的应用程序来检查我刚刚添加的一个功能。当我这样做时,我发现当单击任务栏的一部分时,应用程序并没有移到前面。

这似乎只发生在我打开一个“子”(技术上不是 MDI 子)表单以显示用户已启动的任务的状态时。

任务栏上不存在该子表单(想法是它是同一个应用程序的一部分,因此它不应该在任务栏上获得自己的插槽)。

任何想法可能是什么原因?

编辑:尝试详细说明。问题是这样的,我将启动并运行应用程序,打开一个不同的程序(Excel、Chrome 等),这个新窗口将出现在我的应用程序上。然后,我将在任务栏中单击我的应用程序图标。它似乎获得了焦点,但窗口没有移到前面,Excel(或其他)仍然在它上面。真正查看我的应用程序的唯一方法是最小化/关闭该屏幕上运行的任何其他程序。

【问题讨论】:

  • 我不明白 .. 但请检查您的“子表单”是否为模态并等待一些操作
  • 该表单绝对是模态的(使用 ShowDialog 调用),因为我不希望用户在状态窗口打开时能够执行任何其他操作。编辑了我的原始问题以尝试澄清问题。
  • 嗯,需要稍微调整应用程序以使状态在一个特别长时间运行的用例上更有意义。无论如何,不​​确定这是否是我所做的更改的间接结果(可疑)或者昨天刚刚有一个小鬼,但现在我可以让窗口按预期移动到前面。如果有人有任何想法可能是什么导致了这种情况,我仍然想听听。 Gremlins 确实会回来,根据我的经验,“间接修复”意味着“可能并非在所有情况下都修复”。

标签: vb.net forms focus taskbar


【解决方案1】:

在表单设计器中使用

Form1.Topmost = True

参见相应的 MSDN。
最顶层表单是与所有其他(非最顶层)表单重叠的表单,即使它不是活动表单或前景表单。最顶层的表单始终显示在桌面上窗口 z 顺序的最高点。您可以使用此属性创建一个始终显示在您的应用程序中的表单,例如查找和替换工具窗口。

【讨论】:

  • 我明白你的意思,但问题不在于表单从不显示在顶部(打开时它正确地显示在顶部)。
  • (不允许我编辑我的原始评论)问题是当应用程序重新获得焦点时,它并没有移动到其他没有 TopMost = True 的应用程序的前面(即大约任务管理器以外的所有东西)
  • support.microsoft.com/en-us/kb/169494 >> "最小化程序后,单击任务栏上的程序按钮可能无法恢复或最大化程序。如果使用鼠标右键单击任务栏上的程序按钮, 恢复或最大化命令在程序的上下文菜单中可用。"
  • @Crisit 没有最小化,只是打开了另一个应用程序,以便获得焦点并移到前面。您提到的主题问题是间歇性的吗?如果不能,您能否指出我可以阅读详细信息的地方。正如我所指出的,我不再看到这个问题,所以它似乎比没有更罕见,这导致我说“随便”并继续前进。
猜你喜欢
  • 1970-01-01
  • 2019-11-08
  • 2013-01-27
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多