Vb.net 在多监视器设置中,如何识别winform显示在哪个监视器上?

Vb.net 在多监视器设置中,如何识别winform显示在哪个监视器上?,vb.net,Vb.net,研究这个问题,我找到了很多答案,但没有人回答我的问题。 假设用户有两台显示器,比如一台笔记本电脑屏幕的分辨率为1600×1200,外部显示器的分辨率为2560×1440。无论这两台显示器是如何设置的,如果客户端将程序的主要形式移动到外部显示器,我希望它报告其分辨率为2560×1440。当主窗体移到笔记本电脑上时,它应报告1600x1200 这可能吗?我知道如何报告res,只是不知道如何识别主窗体所在的监视器。您需要首先确定窗体位于屏幕上的含义,因为单个窗体可能跨越多个屏幕。不管怎样,您都将使用屏

研究这个问题,我找到了很多答案,但没有人回答我的问题。 假设用户有两台显示器,比如一台笔记本电脑屏幕的分辨率为1600×1200,外部显示器的分辨率为2560×1440。无论这两台显示器是如何设置的,如果客户端将程序的主要形式移动到外部显示器,我希望它报告其分辨率为2560×1440。当主窗体移到笔记本电脑上时,它应报告1600x1200


这可能吗?我知道如何报告res,只是不知道如何识别主窗体所在的监视器。

您需要首先确定窗体位于屏幕上的含义,因为单个窗体可能跨越多个屏幕。不管怎样,您都将使用
屏幕
类,但计算结果会有所不同。最简单的选择是使用
位置
属性,例如

用于Screen.AllScreens中的每个scrn
如果scrn.Bounds.Contains(位置),则
Show($“分辨率:{scrn.Bounds.Width}x{scrn.Bounds.Height}”)
退出
如果结束
下一个
另一种选择是使用包含表单最大比例的屏幕,例如

Dim maxArea=0
Dim分辨率=大小。空
对于Screen.AllScreens中的每个scrn

尺寸相交=矩形相交(scrn.Bounds,Bounds) 尺寸区域=交叉点宽度*交叉点高度 如果面积>最大面积,则 最大面积=面积 分辨率=scrn.Bounds.Size 如果结束 下一个 MessageBox.Show($“分辨率:{Resolution.Width}x{Resolution.Height}”)
请注意,如果表单的相同部分位于多个屏幕上,则此代码将显示遇到的第一个问题的解决方案

也许还有其他选择,尽管这些似乎是最有可能的

编辑:


还值得注意的是,第一个代码对于最大化的表单不起作用,因为实际的
位置
值将超出它所在屏幕的范围,因此您需要一些技巧来处理它。第二个代码将处理该问题。

Dim intersection=Rectangle.Intersect(scrn.Bounds,Bounds)在边界上给出“not declared”错误。您将代码放在哪里?它应该在一个窗体中,并且窗体有一个
Bounds
属性。对不起,我的错。现在一切都好了。谢谢,完全符合要求。
Screen.FromControl()
Screen.FromRectangle()
返回包含窗口最大部分的屏幕。。请阅读有关应用程序DPIA感知的说明。