如何判断Windows窗体是否已打开但是在另一个窗口后面?

时间:2012-07-06 17:02:30

标签: c# .net winforms .net-2.0 form-control

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

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

如果是这种情况,我想把它带到前面,实际上让用户可以看到它。

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

我发现问题的唯一解决方法是将Form的FormWindowState设置为Minimized / Maximized然后正常,但这有点像黑客并且看起来不太好。

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

3 个答案:

答案 0 :(得分:6)

奇怪。

this.Activate()应该可以解决问题。

你总是可以尝试'糟糕的黑客方法',我感到内疚。但如果this.Activate()不起作用,为了进行测试,您可以尝试:

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

我从未将此推荐视为解决方案,但它可能会向您展示功能。如果上面提到的代码那么,我会更关心为什么this.Activate()不起作用。

对于检测窗口,你不能使用命令通过C#来检测它。有关详细信息,请查看以下问题答案: How to check if window is really visible in Windows Forms?

答案 1 :(得分:2)

尝试在下面连线,

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

通过上面的事件接线,只要表格被最小化,部分/完全隐藏在另一个表格中,它就会告诉您。

答案 2 :(得分:-1)

嗯,如您所知,Windows可能会或可能没有Focus。如果窗口被聚焦,则用户点击它。您可以尝试Focused属性。否则,我不认为有一个属性告诉你是否有另一个窗口在你的上方 您可以“给予”焦点,因此使用Focus()方法“弹出”窗口。

注意:窗口可以是都在另一个窗口下。
为了确定你的窗户是否在另一个窗口下面,我担心你必须更深入。