检查winform应用程序是否将焦点丢失到其他应用程序
本文关键字:应用程序 其他 winform 是否 检查 焦点 | 更新日期: 2023-09-27 18:25:28
我有一个带有许多子窗体的应用程序,当我切换到不同的应用程序时,有些表单仍然保留在顶部(我使用的是Form.TopMost
属性)。
我一直在寻找解决方案,在这里我找到了部分答案:
如何检测应用程序何时失去焦点?
C#表单激活和停用事件
但两者都不适合我。CCD_ 2事件也在主表单失去对子表单的关注时被触发。我想检查我的应用程序是否因不同的应用程序而失去焦点,这样我就可以隐藏所有子窗体。
感谢
编辑:感谢@Hans Passant,我将Form.TopMost切换为Show(所有者)。
尝试WM_ACTIVATEAPP
。
覆盖WndProc
并检查消息类型和参数。例如,在您的主窗体中,添加以下代码。
protected override void WndProc(ref Message m)
{
const int WM_ACTIVATEAPP = 0x001C;
if (m.Msg == WM_ACTIVATEAPP)
{
if (m.WParam.ToInt64() == 0) /* Being deactivated */
{
/* TODO: */
}
}
base.WndProc(ref m);
}
它对我有效。