问题很简单:有没有办法将单个表单扩展到所有连接的屏幕?
答案 0 :(得分:1)
不,除非你打算使用合理的低级语言编写代码,例如C和抓取对图形内存的访问权。
通常情况下,操作系统会为您执行布局,因此,除非您具有低级访问权限或供应商发布的API,否则我认为这很难。
答案 1 :(得分: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的位置,这意味着如果你有任何监视器位于这一点的上方或左侧,它们将不会被覆盖。要解决此问题,您需要在显示表单后设置位置。