【问题标题】:How to get the screen on which the windows is maximized on?如何获得最大化窗口的屏幕?
【发布时间】:2014-07-01 17:11:43
【问题描述】:

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

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

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

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

代码sn-p:

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

为了获得全貌,我们保存窗体关闭时的边界和窗口状态。再次打开时,又恢复到原来的bounds和windowstate。

【问题讨论】:

  • 使用screen.WorkingArea 而不是screen.BoundsDesktopBounds 基于工作区域,而不是屏幕区域。另外,请参阅下面的答案。

标签: winforms


【解决方案1】:

您可以只使用Screen.FromControl(this) 来获取表单所在的屏幕...但是您应该事先检查它是否已最大化,否则您将获得表单最大部分所在的屏幕(然后再次,如果你最大化它,那将是表单最大化的屏幕)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2010-12-24
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多