2009-05-26 68 views

回答

7

你正在寻找的事件是Form.ActivatedForm.Deactivated

+0

感谢 - 这是我的倾向,但我不知道它是否会工作,因为该应用程序有一个选项卡式界面。我会检查它。 – subrama6 2009-05-26 15:30:32

0

对于WPF,FocusChanged在窗口上。 Winforms中应该有类似的事件。你可以在Visual Studio上找到使用intellisense。

激活/禁用似乎是标准的。

0

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

1

用途:

this.LostFocus 

和:

this.GotFocus 

在最父窗体/窗口

2

我好奇这种技术如何在各种条件下工作一个MDI应用程序。事实证明,这不适用于所有情况。

如果你的应用程序是一个MDI应用程序,那么当应用程序本身丢失/重新获得焦点时(如其他答案中所述),如果MDI表单中的非模态窗体具有焦点,则主MDI表单将失去/获得焦点。但是,如果模式对话框打开(对应用本身模式),则主MDI表单不会松动/获得焦点(至少激活/停用的事件似乎不会触发)。换句话说,如果你所处理的只是MDI表单的激活/停用事件,那么当应用程序失去/获得焦点时,如果模态表单具有焦点,则可能会错过。

因此,看起来这个工作,你需要同时处理MDI窗体的激活/停用事件以及模态打开的任何窗体上的事件(通过ShowDialog)。

+0

您还可以通过[检测哪个应用程序具有焦点] [1]来过滤停用事件,您可以将其放入主窗口的停用处理程序中,模态对话应在退出时返回焦点。 [1] http://stackoverflow.com/questions/2183541/c-detecting-which-application-has-focus – 2012-11-19 17:49:48

相关问题