C# 处理自动缩放的正确方法

C# 处理自动缩放的正确方法,c#,winforms,.net-4.0,C#,Winforms,.net 4.0,我正在与另一位开发人员一起开发WinForms应用程序,我们在自动缩放相关的外观方面遇到了一个大问题 我的系统(索尼VAIO)在此菜单上的默认值为125%: 据我所知,125%将DPI设置为120,默认字体大小(菜单等)设置为11磅。在另一个开发人员的系统上,他的默认值为100%,即96 dpi,字体为9pt。我不确定,但我认为只有新闻部才是造成我们悲痛的原因 问题表现为文本大小错误,或者掩盖了其他控件,或者间距过大(取决于上次是谁在designer中打开的)。据我所知,所有Container

我正在与另一位开发人员一起开发WinForms应用程序,我们在自动缩放相关的外观方面遇到了一个大问题

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

据我所知,125%将DPI设置为120,默认字体大小(菜单等)设置为11磅。在另一个开发人员的系统上,他的默认值为100%,即96 dpi,字体为9pt。我不确定,但我认为只有新闻部才是造成我们悲痛的原因


问题表现为文本大小错误,或者掩盖了其他控件,或者间距过大(取决于上次是谁在designer中打开的)。据我所知,所有
ContainerControl
s都设置为
AutoScaleMode.Inherit
,顶级表单是
AutoScaleMode.Dpi
。这是大多数其他人使用的吗?

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


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

我的一个应用程序也有同样的问题。答案是将其转移到WPF。我仍然使用WinForms时的解决方案是有2个可执行文件。一个在96DPI下开发,另一个在120DPI下开发。这是加倍的努力,但我尝试过任何布局配置都没有成功。如果我的控件在96DPI上看起来不错,那么当切换到120DPI时,它们就不在窗口的应用程序中了。维切维萨


WPF是这个恼人问题的唯一解决方案。

最后,我们的解决方案是通过设置
AutoScaleMode=AutoScaleMode.None
禁用自动缩放。它需要仔细地放置东西(并留下比预期更大的间隙),但至少没有自动缩放并把事情搞砸


这似乎是一个大问题,因为由于我的屏幕设置较高,甚至VisualStudio的某些部分也会出现瑕疵。

真正的解决方案是使用WPF及其强大的布局机制。在这一点上,将整个项目切换到WPF是否可行是另一回事…不幸的是,客户明确要求不在WPF中完成。有趣的是。。。他们给出了具体的原因吗?我相信这是因为在WPF交付后,他们没有任何熟悉WPF的人支持它。@Tymek那么那些没有设置为100%的用户呢?