如何确定我的.NET Windows Forms程序运行在哪个监视器上?

我有一个C#Windows应用程序,我想确保将出现在另一台显示器,如果用户将其移动到一个。 我需要保存主表单的大小,位置和窗口状态(我已经处理过),但是我也需要知道用户closures应用程序时显示的是哪个屏幕

我正在使用Screen类来确定当前屏幕的大小,但是我无法find关于如何确定应用程序在哪个屏幕上运行的任何信息。

编辑:谢谢你的回复,每个人! 我想确定窗口是哪个监视器,所以我可以进行适当的边界检查,以防用户不小心将窗口放在可视区域外面,或者改变屏幕大小,使窗体不再可见。

你可以得到一个你使用这个代码的屏幕数组。

Screen[] screens = Screen.AllScreens; 

你也可以通过运行这个代码来找出你在哪个屏幕上( 是你正在使用的窗体)

 Screen screen = Screen.FromControl(this); //this is the Form class 

总之检查一下Screen类和静态辅助方法,他们可能会帮助你。

MSDN链接 ,没有太多的..我建议在自己的代码搞乱。

如果你还记得窗户的位置和大小,那就够了。 当您将位置设置为之前使用的位置时,如果碰巧位于第二台显示器上,则会返回到此位置。

例如,如果您有两台显示器,两台显示器的尺寸均为1280×1024,并将窗口的左侧位置设置为2000像素,则会显示在第二台显示器上(假设第二台显示器位于第一台显示器的右侧)。

如果您担心在下一次启动应用程序时第二台显示器不在该处,则可以使用此方法确定您的窗口是否与任何屏幕相交:

 private bool isWindowVisible(Rectangle rect) { foreach (Screen screen in Screen.AllScreens) { if (screen.Bounds.IntersectsWith(rect)) return true; } return false; } 

只要通过你的窗口的所需位置,它会告诉你,如果它会在其中一个屏幕上可见。 请享用!

您可以使用当前屏幕

 var s = Screen.FromControl(this); 

this是表单(或表单上的任何控件)。 至于如何记住这是有点棘手,但我会去在Screen.AllScreens数组中的索引,或者也许s.DeviceName。 无论哪种情况,请在启动时使用设置之前进行检查,以防止使用断开的显示器。

表单的位置将告诉你表单在哪个屏幕上。 我不明白为什么你需要知道它在哪个屏幕上,因为如果你使用你保存的位置恢复它,它应该只是恢复到相同的位置(也许你可以扩大为什么)。

否则,你可以做这样的事情:

 Screen[] scr = Screen.AllScreens; scr[i].Bounds.IntersectsWith(form.Bounds); 

每个屏幕都有一个返回矩形的Bounds属性。 您可以使用IntersectsWith()函数来确定窗体是否在屏幕中。

此外,他们基本上提供了一个功能,这也是在屏幕类

 Screen screen = Screen.FromControl(form); 

您可以使用“屏幕”对象:System.Windows.Forms.Screen

开始玩这样的事情:

  Screen[] screens = Screen.AllScreens; for (int i = 0; i < screens.Length ; i++) { Debug.Print(screens[i].Bounds.ToString()); Debug.Print(screens[i].DeviceName); Debug.Print(screens[i].WorkingArea.ToString()); } 

它可能会得到你所需要的