将表单展开到所有屏幕

时间:2010-09-28 19:31:52

标签: .net winforms screens

问题很简单:有没有办法将单个表单扩展到所有连接的屏幕?

2 个答案:

答案 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的位置,这意味着如果你有任何监视器位于这一点的上方或左侧,它们将不会被覆盖。要解决此问题,您需要在显示表单后设置位置