如何使我的WinForms应用程序支持DPI?

4
我在一家公司工作,我们的旗舰产品是Winforms应用程序。最近我们重新设计了品牌和用户界面。我们发现表单现在无法正确显示文本,有些控件不对齐或已经消失在边缘之外。
我能否使此应用程序上的表单具有DPI感知功能,而不需要进行过多的重构,因为我们没有时间。

可以转移到WPF,但不是很快。 - zerkms
可能是[WinForms不同DPI布局]的重复问题(https://dev59.com/PkrSa4cB1Zd3GeqPYKrT) - ChrisF
its likely :) thanks ... - Sam
2个回答

13

非常重要的一点是不要指定像素坐标和大小。这就排除了使用 Control.TopControl.Left,因为在“仅仅放置”控件在窗体上时,设计师会使用它们。

为了实现适用于不同 DPI 设置的 UI,几乎所有内容都必须是动态大小的。控件应启用 Control.AutoSize。但仅启用 AutoSize 将完全破坏您的布局,因为控件位置仍然是静态的。

为了使控件动态定位,可以使用容器控件,如FlowLayoutPanelTableLayoutPanel(大小设置为 AutoSize)。然后,这些容器中的普通控件会根据自动确定的大小在窗体上移动。

正如您所见,这并不简单,需要一些经验才能做到恰当,并且需要大量测试(具有不同 DPI 设置的虚拟机效果非常好)。但我认为一定要做,因为如果某些东西在我的笔记本电脑上看起来很愚蠢和有问题,我总是感到很烦恼。


2
FlowLayoutPanel与常规Panel配合使用。关键在于不指定大小,而是使用锚定、停靠和增长属性。 - Ritch Melton

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接