所以,这里是这样的场景:我试图让我的所有表单(它们是 Winforms)在 4K 和 1080p(也称为高 DPI 或“dpi-aware”)中看起来不错。我(出于这个问题的目的)具有三种形式:frmCompanyMasterEdit继承自frmBaseEdit继承自frmBase,继承形式System.Windows.Forms.Form。
我尝试了旧方法,通过在清单中使我的应用程序能够识别 DPI:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
这样,除了我可以修复的小锚定问题外,表格在 4K 下看起来很完美,看起来就像那样,但在 1080p 下有点模糊。这里是 4K:4K 的新旧方式。
无论如何,所以我从头开始并尝试使用 .NET 4.7 中描述的新方法,针对 4.7 框架并添加以下代码:
到 app.config
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
到 app.manifest
<!-- Windows 10 compatibility -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
并从 app.manifest 中取出旧代码,以免覆盖新的 .NET 4.7 方式。我确保将代码放在适当的位置。所以这里的表格在 4K 中看起来不错,如上图,但现在在 1080p 中它非常放大,如下所示: 1080p 新方式
因此,无论哪种方式,除了较小的锚定问题外,该表格在 4k 中看起来很棒,而且它(旧方式)尺寸合适但在 1080p 中有点模糊,或者在 1080p 中不模糊但确实放大了。我也不得不更改所有designer.vb文件中的这两行,如下所示:
Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
我不知道为什么我无法让它在 1080p 中看起来合适。就像我说的,我的目标是 4.7 .NET 框架。我在适当版本的 Windows 10(版本 1709 / Creator's edition)上运行。1080p 以 100% 缩放。此外,我们没有资源升级到 WPF。