【发布时间】:2021-08-31 20:02:35
【问题描述】:
我正在使用 VB.net 创建一个 Windows 窗体
表单是 VSTO Excel 插件的一部分
我使用以下方法将表单移动到辅助显示器:
Dim b As Rectangle = activeScreen.Bounds
Dim location As Point = Me.Location
Me.StartPosition = FormStartPosition.Manual
location.X = location.X + b.X
location.Y = location.Y + b.Y
Me.Location = location
其中activeScreen 的类型为System.windows.forms.screen。
在调整大小之前,我的表单大小为 {Width = 1139 Height = 308}
我使用
调整我的表单大小Me.size = newsize
其中新尺寸的值为 {Width = 2278 Height = 308}
但是,Me.size 的值不知何故跳到了 {Width = 5695 Height = 770}
在屏幕上,这实际上是所看到的,现在的表格比我预期的要大 2.5 倍。
如果我以这种方式更改表单的高度,一切正常。同样,当我将表单保留在主显示屏上时,上面的代码也可以正常工作。
Me.DeviceDpi 的值在两种情况下都是 96。
我的主要显示是缩放 250%(推荐)和设置中的显示分辨率 3200x1800,屏幕边界是 [Bounds={X=0,Y=0,Width=3200,Height=1800}
设置中的辅助显示为 100%(推荐)和显示分辨率 1360x768,屏幕边界为 {X=8000,Y=938,Width=3400,Height=1920}
【问题讨论】:
-
您描述的措施没有多大意义。请参阅此处的注释:Using SetWindowPos with multiple monitors,关于 VirtualScreen 坐标和其他信息。不要跳过 DpiAwaress 部分,它可能会变得有用。 -- 将表单缩放为字体可以产生花哨的效果。
-
感谢 Jimi 的评论。已经考虑了 DPI 和缩放的影响。但是,按照您的链接,并考虑到我的代码是 VSTO Excel 插件的一部分,我最终来到了这个页面:docs.microsoft.com/en-us/office/client-developer/ddpi/…。非常仔细地遵循那里的所有说明,但都无济于事。请参阅下面的答案,了解真正有什么帮助
标签: vb.net winforms vsto excel-interop