Winforms:从一台有两个或两个以上屏幕的计算机恢复到一个屏幕的计算机

本文关键字:屏幕 计算机 两个 恢复 一个 Winforms 一台 | 更新日期: 2023-09-27 18:00:55

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

Winforms:从一台有两个或两个以上屏幕的计算机恢复到一个屏幕的计算机

使用System.Windows.Forms中的screen类检查屏幕数量。AllScreens包含系统上当前所有屏幕的列表。如果您保存的位置对此布局不再有效,您可能应该将位置重置为默认位置。

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

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