7

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

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

这个问题在这里可能更好地表述/复制: 视觉工作室设计师 dpi 设置

或在这里: Visual Studio 和 DPI 问题

要明确我想要做的是防止控件在被具有不同 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 设计器中编辑表单,我只是想弄清楚我需要做什么才能避免出现可怕的设计回归。

4

2 回答 2

11

AutoScaleMode = AutoScaleMode.None;

另见:ContainerControl.AutoScaleMode财产

于 2011-07-12T02:31:21.943 回答
1

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

第一:保持 AutoScaleMode = Font!这将在运行时很好地工作以使您的应用程序具有 DPI 意识。(甚至很酷的 per-Monitor DPI Aware)。

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

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

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

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

于 2016-12-22T09:56:15.680 回答