如何确定我的.NET Windows Forms程序运行在哪个监视器上?
我有一个C#Windows应用程序,如果用户将它移动到另一个监视器上,我想确保它会显示在第二个监视器上。 我需要保存主窗体的大小,位置和窗口状态 - 我已经处理过 - 但我还需要知道用户关闭应用程序时显示的屏幕。
我正在使用Screen类来确定当前屏幕的大小,但我无法找到关于如何确定应用程序在哪个屏幕上运行的任何信息。
编辑:感谢大家的回复! 我想确定窗口是在哪个监视器上,这样我可以进行适当的边界检查,以防用户意外地将窗口放在查看区域外面或更改屏幕大小,以致窗体不再可见。
你可以得到一组你使用这段代码的屏幕。
Screen[] screens = Screen.AllScreens;
你也可以通过运行这个代码来找出你在哪个屏幕上( 这是你正在使用的窗体)
Screen screen = Screen.FromControl(this); //this is the Form class
总之检查一下Screen类和静态辅助方法,它们可能会帮助你。
MSDN链接,没有太多..我建议在自己的代码中搞乱。
如果你记得窗户的位置和大小,那就足够了。 当您将位置设置为之前使用的位置时,如果碰巧位于第二台显示器上,它将返回到那里。
例如,如果您有两台显示器,两台显示器的尺寸均为1280x1024,并将窗口的左侧位置设置为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。 无论哪种情况,请在启动时使用设置前进行检查,以防止使用断开连接的监视器。
上一篇: How do I determine which monitor my .NET Windows Forms program is running on?