【问题标题】:Problem changing size of a form on secondary display在辅助显示器上更改表单大小的问题
【发布时间】: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


【解决方案1】:

这个问题的答案似乎与问题没有相似之处。

作为对 Form_PreviewKeyDownevent 的响应的一部分,我正在调整表单大小

将代码移动到 Form_KeyUp 事件中,突然间一切正常,就像在主监视器上运行时一样。

同样,我的表单的一部分包含一个标签,我可以动态更改和移动。当我将表单移动到辅助显示器时,这个表单就消失了。调试大小、位置、边界等显示的数字与表单上的所有其他控件一致。尝试调用 BringToFront() 认为可能是一些细微的缩放导致标签移动到另一个控件后面,但这也无济于事。

解决方案/解决方法 - 每次更改或移动标签时,将其从控件中删除并重新添加新创建的标签。再一次,通过这项工作,一切都再次像在主显示器上一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多