如何获得最大化窗口的屏幕?

时间:2014-07-01 08:58:00

标签: winforms

在Windows窗体中,如何获得最大化窗口的屏幕?当我在右侧屏幕上最大化一个表单时,我发现该屏幕时遇到很多问题。

目前,我一直在使用IntersectsWith检查迭代所有屏幕。但是如果在最大化之前窗口位于两个屏幕上,则两个屏幕将与窗口的RestoreBounds相交。因此,我仍然不知道窗口在哪个屏幕上最大化...

如果我使用DesktopBounds,那么它们两个屏幕也会与它们相交。这很奇怪,因为这些边界实际上是我右边屏幕上最大化形式的界限(1912,87,1456,916)。我的左侧屏幕与那些边界相交怎么可能?

显然我的左侧屏幕的分辨率为1920x1080,所以问题确实是为什么DesktopBound.Left值在我的右侧屏幕最大化时为1912?不应该是1921年吗?

代码段:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    foreach (var screen in Screen.AllScreens)
    {
        if (screen.Bounds.IntersectsWith(this.DesktopBounds))
        {
            //Found screen
        }
    }
}

为了全面了解,我们保存Form关闭时的边界和windowstate。当它再次打开时,它将恢复到相同的边界和窗口状态。

1 个答案:

答案 0 :(得分:1)

您可以使用Screen.FromControl(this)来获取表单所在的屏幕...但是您应该检查它是否已经预先最大化,否则它将为您提供表单最大部分所在的屏幕(然后,再次,这将是窗体最大化的屏幕,以防你最大化它。)