5

无论窗体是最大化、最小化还是 FormWindowState 为 Normal,调用 Form.Visible 都将返回 true。

我想知道的是如何判断表单是否打开但“隐藏”在另一个应用程序的窗口后面。

如果是这样的话,我想把它放在前面,让用户真正看到它。

我尝试了 BringToFront() 方法,但没有奏效。我也尝试调用 Show() 方法,但如果表单位于另一个应用程序的窗口后面,它仍然是这样。

我发现该问题的唯一解决方法是将表单的 FormWindowState 设置为最小化/最大化然后正常,但这有点小技巧,看起来不太好。

有人能告诉我如何判断表格是否在另一个窗口后面以及如何将其带到前面吗?

4

3 回答 3

7

奇怪的。

this.Activate()应该做的伎俩。

你总是可以尝试一种“可怕的黑客方法”,我对传播这种方法感到内疚。但如果this.Activate()不起作用,为了测试,您可以尝试:

this.TopMost = true;
this.Focus();
this.BringToFront();
this.TopMost = false;

我从未将其推荐为解决方案,但它可能会向您展示功能。如果上述代码起作用,我会更担心为什么this.Activate()不起作用。

至于检测窗口,您不能使用命令通过 C# 来检测它。检查以下问题的答案以获取更多信息: 如何检查窗口在 Windows 窗体中是否真的可见?

于 2012-07-06T17:24:09.700 回答
2

尝试在下面接线,

private void frmMyForm_Deactivate(object sender, EventArgs e)
    {
        // Raise your flag here.
    }

通过连接以上事件,它会在表单最小化、部分/完全被另一个表单隐藏时告诉您。

于 2012-09-26T14:32:26.700 回答
-1

好吧,如您所知,Windows 可能有也可能没有Focus. 如果一个窗口被聚焦,那么用户点击了它。你可以试试Focused楼盘。否则,我认为没有属性可以告诉您是否有另一个窗口在您的上方。您可以“给予”焦点,因此使用该方法
“弹出”窗口。Focus()

注意:一个窗口既可以聚焦,也可以位于另一个窗口下。
要确定您的窗口是否不在另一个窗口下,恐怕您必须更深入。

于 2012-07-06T17:19:16.530 回答