应用程序失去和获得焦点的.NET事件

3

有没有一种简单的方法可以检测 .NET 应用程序何时获得或失去焦点?

6个回答

7

谢谢 - 那是我的倾向,但我不知道它是否会起作用,因为应用程序具有选项卡界面。我会进一步了解的。 - subrama6

2
我很好奇这种技术在MDI应用程序中的各种条件下会如何运作。事实证明,这并不适用于所有情况。
如果您的应用程序是MDI应用程序,则当应用程序本身失去/重新获得焦点时,如果MDI窗体内的非模态窗体具有焦点,主MDI窗体将失去/获得焦点(如其他答案中所述)。然而,如果打开了模态对话框(对应用程序本身而言是模态的),则主MDI窗体不会失去/获得焦点(至少激活/停用事件似乎不会触发)。换句话说,如果您只处理MDI窗体的激活/停用事件,则可能会错过应用程序失去/获得焦点的情况,如果一个模态窗体具有焦点。
因此,似乎为了使其正常工作,您需要处理MDI窗体的激活/停用事件以及任何通过ShowDialog模式打开的窗体上的这些事件。

你也可以通过[检测哪个应用程序具有焦点][1]来过滤你的停用事件,这可以放在主窗口的Deactivate处理程序中,模态对话框在退出时应返回焦点。 [1] https://dev59.com/tnI95IYBdhLWcg3wtwb4 - Dead.Rabit

1

使用:

this.LostFocus

并且:

this.GotFocus

在最顶层的表单/窗口上


0
对于WPF,窗口上的FocusChanged。在Winforms中应该有类似的事件。您可以使用Visual Studio上的智能感知来查找。 Activated/Deactivated似乎是标准的。

0

0

为主窗口处理Control.GotFocus和Control.LostFocus事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接