我正在使用 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
。
调整大小之前,我的表单大小为{宽度= 1139高度= 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}
这个问题的答案似乎与问题没有相似之处。
作为对 Form_PreviewKeyDownevent 响应的一部分,我正在调整表单大小
将代码移至 Form_KeyUp 事件,突然一切都正常运行,就像在主监视器上运行时一样。
同样徒劳的是,我的表单的一部分包含一个我可以动态更改和移动的标签。当我将表单移动到辅助显示器时,这个标签就消失了。调试大小、位置、边界等显示的数字与表单上的所有其他控件一致。尝试调用 BringToFront() ,认为可能是一些微妙的缩放导致标签移动到另一个控件后面,但这也没有帮助。
解决方案/解决方法 - 每次更改或移动标签时,将其从控件中删除并重新添加新创建的标签。再次,通过此解决方案,一切再次像在主显示器上一样工作。