我已经找到了很多研究此问题的答案,但没有解决我的问题。 假设用户有2个显示器,例如笔记本电脑的屏幕分辨率为1600×1200分辨率,外部显示器的分辨率为2560×1440分辨率。无论如何设置2个显示器,如果客户端将程序的主窗体移动到外部监视器,我希望它报告其2560×1440分辨率。将主表单移至笔记本电脑时,应报告1600x1200。
这可能吗?我知道如何报告资源,我只是不知道如何识别主表单位于哪个监视器。
答案 0 :(得分:2)
您首先需要确定表单在屏幕上的含义,因为单个表单有可能跨越多个屏幕。无论如何,您都将使用Screen
类,但是计算将有所不同。最简单的选择是使用Location
属性,例如
For Each scrn In Screen.AllScreens
If scrn.Bounds.Contains(Location) Then
MessageBox.Show($"Resolution: {scrn.Bounds.Width} x {scrn.Bounds.Height}")
Exit For
End If
Next
另一种选择是使用包含表单中比例最大的屏幕,例如
Dim maxArea = 0
Dim resolution = Size.Empty
For Each scrn In Screen.AllScreens
Dim intersection = Rectangle.Intersect(scrn.Bounds, Bounds)
Dim area = intersection.Width * intersection.Height
If area > maxArea Then
maxArea = area
resolution = scrn.Bounds.Size
End If
Next
MessageBox.Show($"Resolution: {resolution.Width} x {resolution.Height}")
请注意,如果表单的相等部分在多个屏幕上,则此代码将显示第一个遇到的分辨率。
也许还有其他选择,尽管这些选择最有可能。
编辑:
还值得注意的是,第一个代码不适用于最大化形式,因为实际的Location
值将不在其所在的屏幕范围内,因此您需要一点点麻烦处理。第二个代码将毫无问题地处理该问题。