为不同大小的监视器缩放 Windows 窗体中的组件 - Visual Basic

Posted

技术标签:

【中文标题】为不同大小的监视器缩放 Windows 窗体中的组件 - Visual Basic【英文标题】:Scaling Components In Windows Forms For Different Size Monitors - Visual Basic 【发布时间】:2021-11-22 09:43:31 【问题描述】:

我目前正在开发一个 Windows 窗体应用程序,以便在 Visual Basic 的 4K 显示器上运行。我在缩放组件时遇到问题,主要是文本(标签)。我开发了大小为 3840x2160 的表格,并尝试在迁移到不同的显示器时保持“纵横比”或文本大小与表格的其余部分相同。有成千上万的标签和组件,因此手动设置它们不是最佳选择。用外行的话来说,这几乎就像我只是想将表格“拉伸”为图片并显示它。我可以按预期工作的唯一方法是将屏幕缩放设置为“225%”。我希望有一种更合适的方法来做到这一点,这样我就不必更改屏幕缩放比例。

来自其他帖子: 我添加了一个 App Manifest 文件,并尝试了具有“AutoScaleMode”、“AutoSize”和“AutoSizeMode”属性的不同配置。

如果有任何建议,请告诉我,我已经浏览了许多其他帖子,但仍然没有找到可行的方法。谢谢!

【问题讨论】:

这里docs.microsoft.com/en-us/dotnet/desktop/winforms/… 有一些关于调整大小、自动缩放和 Windows 窗体中 dpi 感知的信息 好的,谢谢。我已经阅读了这份文件,但仍然没有任何运气。我的主要问题是我的文本没有缩放,或者带有文本的东西,如标签、复选框、单选按钮。其他一切都在适当缩放,所有面板、按钮(不是里面的文本)和其他控件都按预期缩放。任何额外的信息将不胜感激! 【参考方案1】:

我认为没有任何内置功能可以开箱即用。

通过调整字体大小以随窗口大小缩放来执行类似操作的“技巧”是利用 Form.Resize 事件,然后使用窗口的当前高度和宽度进行一些计算来设置控件的字体大小.

Private Sub Form1_Resize(ByVal sender As Object, ByVal e As EventArgs)
    label1.Size = New Size(Me.ClientSize.Width / 3, Me.ClientSize.Height / 3)
    label1.Font = New Font("Arial", Me.ClientSize.Height / 20)
End Sub

这个想法不是我的。我在 this SO Post 上找到的。

【讨论】:

以上是关于为不同大小的监视器缩放 Windows 窗体中的组件 - Visual Basic的主要内容,如果未能解决你的问题,请参考以下文章

C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小

在 Windows 窗体控件中调整大小以及窗体调整大小

带有缩放的 Windows 屏幕截图

vc中如何让背景图片随窗体的大小变化而改变 mfc

“使用Windows XP风格dpi缩放”禁用W7上任务栏的自动隐藏功能。解决方法?

如何在 C# windows 窗体中绘制可缩放图像