我可以告诉Visual Studio不要更改项目的DPI吗?

时间:2010-11-02 00:06:49

标签: c# visual-studio visual-studio-2008 dpi

我有一个从.NET 1.1转换为3.5的项目正在2008年开发。

如果我在Windows 7上打开项目,它会将所有内容的大小转换为120dpi大小。如果我然后以96 dpi打开它会改回来。有没有办法让我开发,所以它看起来都很好,并且如果在具有不同DPI的系统上打开,Visual Studio会改变大小?

这个问题可能在这里更好地表达/复制: visual studio designer dpi setting

或者在这里: Visual Studio and DPI issue

要清楚我要做的是阻止控件在被具有不同DPI设置的多个开发人员使用时在设计器中调整大小。在我注意到这个问题的所有情况下,我一直在使用.NET 1或.NET 2项目升级到最初使用Visual Studio 2008,现在是Visual Studio 2010。

更新(如果有人想与@Ben竞争奖励积分):我有一个正确调整大小的表单,但窗口的大小会以编程方式更改。由于设计人员不了解尺寸,因此如果使用不同DPI的开发人员触摸表单,则窗口会不正确地调整大小。有没有办法解决这个问题,而不是回到在运行时不缩放UI?

例如:我声明的窗口有两种尺寸,如果开发人员在设计时使用120 dpi,它可以正常工作:

private static Size smallSize = new Size(960, 500);
private static Size largeSize = new Size(960, 615);

如果有人在96dpi的设计师中编辑表单,我只是想绕过我需要做的事情,不要有可怕的设计回归。

2 个答案:

答案 0 :(得分:9)

答案 1 :(得分:1)

由于我最近遇到了同样的问题,我想分享我的解决方法。

首先: KEEP AutoScaleMode = Font!这将在运行时很好地工作,使您的应用程序具有DPI感知能力。 (甚至很酷的每个Monitor DPI Aware)。

但是,Visual Studio中的WinForms Designer实际上是根据系统的DPI评估字体大小,因此只要它认为有必要就重新调整。这是问题的核心。触发此评估是因为字体通常以“点”指定其大小(以提供独立于DPI的用户体验)。

我的解决方法是将其更改为设计时间:

  • 在您的表单设计器中设置:Font = MS Sans; 11px。这基本上是OS默认字体,但是使用像素大小指定。因此,不会进行任何设计时重新缩放。
  • 现在,要在运行时恢复高DPI适应性,请将字体更改回使用指定的大小。例如。 Font = SystemFonts.Default。在InitializeComponents之后,Ctor就是一个好地方。

我在我的博客上写了关于我的解决方法的详细信息:http://www.sgrottel.de/?p=1581&lang=en