处理自动缩放的正确方法

时间:2012-06-25 21:34:51

标签: c# winforms .net-4.0

我正在与WinForms应用程序上的另一个开发人员合作,我们遇到与自动缩放相关的外观问题。

我的系统(索尼VAIO)在此菜单上默认为125%:

Display scaling

据我所知,125%将DPI设置为120,默认字体大小(菜单等)设置为11pt。在另一个开发人员的系统上,他的默认值为100%,即96 dpi和9pt字体。我不确定,但我认为只有DPI才会让我们感到悲伤。

问题表现在文本大小错误,要么掩盖其他控件,要么过于分散(取决于最后在设计师中打开过的人)。据我所知,所有ContainerControl都设置为AutoScaleMode.Inherit,顶级表单为AutoScaleMode.Dpi。这是大多数人使用的吗?

3 个答案:

答案 0 :(得分:4)

我的一个应用程序遇到了同样的问题。答案是将其转移到WPF。我在使用WinForms时附带的解决方案是拥有2个可执行文件。一个在96DPI下开发,另一个在120DPI下开发。这是双重努力,但我尝试了任何布局配置没有成功。如果我的控件在96DPI上看起来很好,当切换到120DPI时,它们就不在窗口的应用程序中了。反之亦然。

WPF是解决这个烦人问题的唯一方法。

答案 1 :(得分:0)

这可能是您在表单中锚定组件时遇到的问题。例如,如果组件未锚定到所有四个角并且dpi发生更改,则格式可能会受到影响。

当我更改计算机上的dpi并打开设计器时,我没有看到任何格式化问题......也许更多信息可能有所帮助。哪些组件相互覆盖?

答案 2 :(得分:0)

最后,我们的解决方案是通过设置AutoScaleMode = AutoScaleMode.None禁用自动缩放。它需要仔细放置一些东西(并留下比预期更大的间隙),但至少自动缩放不会出现并搞砸了。

这似乎是一个很大的问题,因为由于我的屏幕设置较高,甚至部分VisualStudio都会出现伪影。