如何确定我的 winform 在哪个监视器中?

Posted

技术标签:

【中文标题】如何确定我的 winform 在哪个监视器中?【英文标题】:How do I determine which monitor my winform is in? 【发布时间】:2010-09-24 23:55:41 【问题描述】:

我一直在这个网站上下,发现了很多关于 Screen 类的信息,以及如何计算监视器的数量等等,但是我如何确定表单当前处于哪个监视器?

【问题讨论】:

【参考方案1】:

比使用边界更简单的方法是使用 Screen.FromControl() 方法。这与 Windows 使用的功能相同。

Screen.FromControl(this)

将为包含您调用它的大部分表单的屏幕返回屏幕对象。

【讨论】:

【参考方案2】:

这应该对你有用:

private Screen FindCurrentMonitor(Form form) 
 
    return Windows.Forms.Screen.FromRectangle(new Rectangle( _
        form.Location, form.Size)); 
 

它将返回包含大部分表单的屏幕。 Alternativley,你可以使用

return Windows.Forms.Screen.FromPoint(Form.Location);

返回包含表单左上角的屏幕。

【讨论】:

【参考方案3】:

我确实注意到了这一点,但我希望有更优雅的东西(来自 .net 而不是来自你。) 因此,根据您的建议,我这样做了:

    foreach (Screen screen in System.Windows.Forms.Screen.AllScreens)
    
        if (screen.Bounds.Contains(this.Location))
        
            this.textBox1.Text = screen.DeviceName;
        
    

【讨论】:

【参考方案4】:

每个 Screen 对象都有一个 Bounds 属性,您可以使用该属性来查找屏幕占据的坐标,只需检查表单的位置即可。

【讨论】:

以上是关于如何确定我的 winform 在哪个监视器中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在WinForm应用程序中持续监视用户输入

如何在 Windows 10 中重新分配监视器编号

您如何决定在 SQL Server 活动监视器中终止哪个进程?

我可以在性能监视器中使用哪个计数器来查看有多少内存在等待 GC?

如何监视和记录哪些模块在 linux 内核中持有锁?

vs2010哪个版本显示监视窗口