问题很简单:有没有办法将单个表单扩展到所有连接的屏幕?
问问题
114 次
2 回答
1
不,除非您打算使用一种相当低级的语言(例如 C)进行编码并获取对图形内存的访问权限。
通常是操作系统为您执行布局,因此除非您具有低级访问权限或供应商发布的 API,否则我猜这将很难。
于 2010-09-28T19:52:32.807 回答
0
是的,所有屏幕都构成了一个巨大的虚拟表面,您可以在其上放置表单。您只需将表单的位置设置为该表面的左上角,并将其大小设置为该表面的大小。
您可以使用以下代码找到此表面的范围:
private static Rectangle GetVirtualDisplayBounds()
{
Screen[] allScreens = Screen.AllScreens;
Point topLeft = allScreens[0].Bounds.Location;
Point bottomRight = topLeft + allScreens[0].Bounds.Size;
foreach (Screen screen in allScreens.Skip(1))
{
topLeft = new Point(Math.Min(topLeft.X, screen.Bounds.X),
Math.Min(topLeft.Y, screen.Bounds.Y));
bottomRight = new Point(Math.Max(bottomRight.X, screen.Bounds.Right),
Math.Max(bottomRight.Y, screen.Bounds.Bottom));
}
return new Rectangle(topLeft.X, topLeft.Y, bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y);
}
然后你可以适当地调整你的表格:
var bounds = GetVirtualDisplayBounds();
form.Location = bounds.Location;
form.Size = bounds.Size;
您可能还想禁用表单边框:
form.FormBorderStyle = FormBorderStyle.None;
不过我注意到,当您显示表单时,它会弹回到 0,0 的位置,这意味着如果您有任何监视器位于该点的上方或左侧,它们将不会被覆盖。要解决此问题,您需要在显示表单后设置位置。
于 2015-10-13T16:39:13.170 回答