C# 检查winform应用程序是否对其他应用程序失去焦点
我有一个有很多子表单的应用程序,当我切换到其他应用程序时, 有些表单仍然保留在顶部。我正在使用Form.TopMost属性 我在寻找解决方案,我在这里找到了部分答案: 但这两个都不适合我。 当主窗体对子窗体失去焦点时,也会触发Form.Deactivate事件。 我想检查我的应用程序是否对其他应用程序失去了焦点,这样我就可以隐藏所有子窗体 谢谢 编辑: 多亏了@Hans Passant,我将Form.TopMost切换到ShowOwner。尝试一下WM_ACTIVATEAPP 重写WndProc并检查消息类型和参数。例如,在主窗体中,添加以下代码C# 检查winform应用程序是否对其他应用程序失去焦点,c#,winforms,show-hide,C#,Winforms,Show Hide,我有一个有很多子表单的应用程序,当我切换到其他应用程序时, 有些表单仍然保留在顶部。我正在使用Form.TopMost属性 我在寻找解决方案,我在这里找到了部分答案: 但这两个都不适合我。 当主窗体对子窗体失去焦点时,也会触发Form.Deactivate事件。 我想检查我的应用程序是否对其他应用程序失去了焦点,这样我就可以隐藏所有子窗体 谢谢 编辑: 多亏了@Hans Passant,我将Form.TopMost切换到ShowOwner。尝试一下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);
}
这对我很有用。这就是你要找的吗?[这是一个XY问题。最上面的属性被严重滥用,只有在非常罕见的情况下才有必要使用它。请改用自有窗口,Showowner重载来显示它们。@elimad是的,但我试图确定用户是否切换了应用程序,然后隐藏所有表单。@HansPassant,我正在使用最上面的属性来查找表单,我会希望它在用户决定关闭它之前一直处于顶部。这是一个标准的窗口示例,应该是一个拥有的窗口。