我能否告诉Visual Studio不要改变项目的DPI?

7

我有一个从.NET 1.1转换到3.5的项目,它是在2008年开发的。

如果我在Windows 7上打开这个项目,它会将所有东西的大小转换为120dpi的尺寸。如果我再用96dpi打开它,它就会变回去。有没有办法使我开发的内容在两种情况下都看起来很好,而且不会被Visual Studio更改大小,如果在不同DPI设置的系统上打开?

这个问题可能更好地表述/重复在这里: 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的设计师中编辑表单,我需要做什么才能避免可怕的设计回归。


我没有检查过,但是Windows 7有一个应用程序兼容模式。你可以尝试调整设置。 - PradeepGB
2个回答

11

我的理解是,设置可以改变在构建应用程序时控件的调整大小方式。我想要做的是,在多个开发人员使用不同 DPI 设置时,防止控件在设计器中被调整大小。 - Kevin Stricker
如果您仍然希望在运行时进行调整大小(但如果它破坏了设计时的布局,那么在运行时也会同样糟糕),许多开发人员选择在构造函数中(在调用设计器生成的代码之后)通过迭代Controls集合并将AutoSizeMode更改为所需的运行时设置。这样设计师就看不到它,因此不会干扰您的布局。 - Ben Voigt
我认为你已经指引我朝着正确的方向。我可以设置一个常量来确定我的尺寸是基于哪个DPI设计的,以便在PerformAutoScale调用之前将其与AutoScaleDimensions进行比较,从而自动调整不同开发者屏幕的大小。除非有一种简单的方法可以告诉VS在设计时更改我的尺寸。无论哪种方式,我的主要问题肯定是反向思考了问题。谢谢。 - Kevin Stricker
@mootinator:不用谢。你也可以检查一下Addins/Extensions Gallery,看看是否有人制作了一个VS插件来处理这个问题,但至少在运行时循环遍历所有控件应该是相当简单的。 - Ben Voigt

1

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

首先:保持 AutoScaleMode = Font!这将在运行时很好地使您的应用程序适应 DPI。(甚至很酷的每个监视器DPI感知)。

然而,Visual Studio中的WinForms设计器实际上根据系统的DPI评估字体大小,因此每当它认为有必要时就会重新调整大小。这是问题的核心。这种评估是由于字体通常以“点”为单位指定其大小(以提供DPI无关的用户体验)。

我的解决方法是在设计时更改此设置:

  • 在您的窗体设计器中设置:Font = MS Sans; 11px。这基本上是操作系统默认字体,但指定为像素大小。因此,不会发生任何设计时重新调整大小。
  • 现在,在运行时恢复高DPI适应性,将字体更改回使用以点为单位指定的大小。例如:Font = SystemFonts.Default。一个好的位置是在Ctor中InitializeComponents之后。

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


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