为什么winform在同一台4k显示器上显示不同

Man*_*uel 6 c# winforms

我们有一个遗留的.net Windows窗体应用程序.我们已经用Web应用程序替换了大部分内容,但仍然使用Windows窗体应用程序来执行管理任务.

当这个应用程序在4k显示器上使用时,它看起来非常糟糕,这是可以理解的.

但外观会根据系统上的其他显示器而变化.测试是在lenovo 430上完成的,它有一个4k显示器通过显示端口连接.笔记本电脑显示器的分辨率为1920/1080,而4k显示器的分辨率为3840/2160.显示比例始终为200%.

所有以下屏幕截图均在4k显示器上拍摄.

  1. 两个监视器都处于活动状
  2. 仅使用第二个屏幕进行一次测试
  3. 关闭笔记本电脑的一次测试(这意味着只有一台显示器可用于系统)

在此输入图像描述 在此输入图像描述 在此输入图像描述

我知道如果没有更改并设置dpiAware/dpiAwareness,我们的应用程序在4k上看起来不会很好.

但我的问题是:为什么应用程序只会根据哪些显示器处于活动状态而发生变化?有没有办法控制哪种"外观"?

小智 5

也许你知道这一点,但之前没有提到:

有3种应用:

  • 不知道 DPI
  • 系统 DPI 感知
  • 每台显示器 DPI 感知

详情请见:https : //msdn.microsoft.com/de-de/library/windows/desktop/dn469266(v=vs.85).aspx

您可以在 app.config 中为您的应用程序设置 DPI 感知:

<appSettings>
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)

和应用程序清单:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
  </windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)

当你的 DPI >= 150% 缩放可以通过应用程序的人民币额外控制 -> 属性 -> 兼容性 -> 高 DPI 缩放

对于 Windows 窗体,默认为 DPI 缩放禁用高 DPI。所以一切都应该开箱即用。也许此设置之一不是默认设置?尤其是exe上的RMB属性中的配置?