0

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

4

2 回答 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 回答