【发布时间】: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.Bounds。DesktopBounds基于工作区域,而不是屏幕区域。另外,请参阅下面的答案。
标签: winforms