Winforms:将表单位置从具有 two/more 个屏幕的计算机恢复到具有一个屏幕的计算机

Winforms: Restoring form position from a computer with two/more screens to a computer with one screen

我正在使用 C#Winforms 中开发一个小应用程序。用户可以创建应用程序的多个实例并将它们放置在屏幕上。当应用程序关闭时,应用程序将记住每个打开的 window 的位置(存储在 XML 文件中)。在应用重新启动时,它会查看 XML 文件并尝试重新打开它们。 问题是,如果用户将 window 放置在一台双屏计算机(在第二台显示器中),然后 运行 将应用程序放置在另一台具有 1 个屏幕的计算机中,那么 Window 将不会出现屏幕因为坐标不存在。值得一提的是,在单屏计算机中,我可以看到 window 在那里(它在任务栏中)。有没有办法计算 window 的新位置?或者?

使用Screen class in System.Windows.Forms. AllScreens检查屏幕数量,其中包含系统当前所有屏幕的列表。如果您保存的位置不再适用于此布局,您应该将位置重置为默认位置。

正如@SLaks 在评论中提到的,scrren class 帮助我实现了我所需要的。通过简单地获取屏幕的边界并与存储的坐标进行比较,我设法解决了问题:

mainWindow.Location = (Screen.AllScreens.Length == 1 && savedWindow.Location.X > Screen.AllScreens[0].Bounds.Width) ? new System.Drawing.Point(0, 0) : savedWindow.Location;