【问题标题】:When using the WinForms designer, do I always need to have DPI set to 96?使用 WinForms 设计器时,是否总是需要将 DPI 设置为 96?
【发布时间】:2012-09-12 11:32:35
【问题描述】:

对于我当前的显示器,我更喜欢每英寸 120 像素的 DPI 设置(Windows 建议将其作为默认设置)。但是,在设计表单后,它经常在不使用每英寸 120 像素的系统上布局不正确。

我想知道,每当我使用设计器时,是否有必要将我的显示设置设置为每英寸 96 像素?

此外,当其他开发人员具有不同的 DPI 时,也会出现一些问题。他们在设计器中打开一个表单并移动一个文本编辑控件之类的东西,然后突然发现它也会自动调整大小。然后,有一个控件的大小与其他控件不同,我们陷入了混乱。

附:我读过相关的帖子。他们都很有趣,但没有回答我的问题。

How to control the font DPI in .NET WinForms app

C# WinForms disable DPI scaling

WinForms Different DPI Layouts

DPI not scaling properly

Visual Studio and DPI issue

【问题讨论】:

  • 无论如何,通过不断改变 DPI 来弄清楚如何正确布局。这肯定会在您发货后发生。如果您更喜欢将头埋在沙子里,您只会考虑将其保持在设定值。
  • 我确实更改了 DPI 以测试具有不同设置的布局。但是....使用设计器时我应该坚持一个 DPI 吗?似乎如果设计器使用不同的 DPI 设置,每次编辑具有不同 DPI 的表单时,它都会重新布局控件,巧妙地移动它们意味着很难获得一致的结果。哎呀。也许我已经回答了我自己的问题。在使用设计器时,我可能会坚持使用一个 DPI。我只是想知道其他人是否已经在这样做或有其他方法。

标签: winforms


【解决方案1】:

没有。使用 WinForms 设计器时,您无需始终将 DPI 设置为 96。

如果您将 AutoScaleMode 属性设置为 Dpi,则设计器会将当前系统 DPI 写入表单的 AutoScaleDimensions 属性中的 Designer.cs 文件。当设计器用于具有不同 DPI 的系统时,此信息将用于重新调整表单,并且可以在不同 DPI 下使用设计器。

当我尝试其他缩放模式时,这似乎效果不佳。 “无”意味着控件在运行时不会缩放,“字体”似乎存在舍入错误,当显示设置 DPI 更改时,控件大小可能会发生轻微变化,从而导致错误。

我还发现,对于添加到表单的 UserControl,最好将其 AutoScaleMode 设置为 Inherit。如果您使用 Dpi,则其上的控件会重新缩放两次,最终布局不正确。


经过几个小时的实验和互联网搜索,我提出了上述指南,并在其中找到了以下两篇文章:

Automatic scaling in Windows Forms

和:

Child controls on a UserControl may get clipped in a system with a lower Font Dpi

【讨论】:

    【解决方案2】:

    我认为将您的 dpi 永久设置为不同的值不会对您有所帮助。问题是当你更改 dpi 时会出现问题,即你的表单布局无法处理不同的 dpi。

    我没有给你一个绝对的解决方案,只是你应该用不同的dpi进行测试,看看它是否会导致表单显示出现问题。找出导致问题的原因并不难,您很快就会知道应该避免什么。

    【讨论】:

    • 我从事 WinForm 开发已经有一段时间了,但我还没有学会要避免什么。 :)
    • 我的意思是,如果您使用不同的 dpi 进行测试,您很快就能让您的表单更好地处理不同的 dpi 设置。
    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多