【问题标题】:Can I Tell Visual Studio not to Change the DPI of a Project?我可以告诉 Visual Studio 不要更改项目的 DPI 吗?
【发布时间】:2010-11-02 00:06:48
【问题描述】:

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

如果我在 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 设计器中编辑表单,我需要做些什么才能避免出现可怕的设计回归。

【问题讨论】:

  • 我没有检查它,但在 Windows 7 中有一个适用于应用程序的兼容模式。您可以尝试修改设置。

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


【解决方案1】:

【讨论】:

  • 我的理解是设置改变了控件在构建的应用程序中调整大小的方式。我想要做的是防止控件在被具有不同 DPI 设置的多个开发人员使用时在设计器中调整大小。
  • @mootinator:如果您仍然希望运行时调整大小行为(但如果它在设计时破坏了您的布局,那么在运行时也会同样糟糕),许多开发人员选择迭代 @构造函数中的 987654325@ 集合(在调用设计器生成的代码之后)并将AutoSizeMode 更改为所需的运行时设置。这样设计师就看不到它,因此不会弄乱您的布局。
  • 我认为你让我指出了正确的方向。我可能可以为我的尺寸设计的 DPI 设置一个常数以使其正常工作,并将其与 AutoScaleDimensions 进行比较,然后调用 PerformAutoScale 以针对不同的开发人员屏幕自动调整我的尺寸。除非有一种简单的方法可以告诉 VS 在设计时更改我的尺寸。无论哪种方式,我的主要问题肯定是向后考虑问题。谢谢。
  • @mootinator:不客气。您还可以查看 Addins/Extensions Gallery 以查看是否有人制作了 VS 插件来处理此问题,但至少在运行时循环遍历所有控件应该相当简单。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2020-03-20
    相关资源
    最近更新 更多