在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。当它再次打开时,它将恢复到相同的边界和窗口状态。
答案 0 :(得分:1)
您可以使用Screen.FromControl(this)
来获取表单所在的屏幕...但是您应该检查它是否已经预先最大化,否则它将为您提供表单最大部分所在的屏幕(然后,再次,这将是窗体最大化的屏幕,以防你最大化它。)