【问题标题】:Strange behavior in Windows Forms application running at different DPI settings在不同 DPI 设置下运行的 Windows 窗体应用程序中的奇怪行为
【发布时间】:2011-07-21 11:00:14
【问题描述】:

我有一个带有一个主窗体的 Windows 窗体应用程序(用 vs2010/C# 针对 .NET 框架 3.5 编写)。它是在 Win7 的 100% DPI 设置下设计的(我相信那是 96 dpi)。将计算机切换到 150% 时,一切似乎都可以正常缩放,并且所有比例都保持不变。

但是,当我切换到 125% 时,某些控件突然无法缩放,并且看起来与 100% 时一样大。这会打乱整个布局,并且对用户隐藏一些控件。

对于 125% 和 150% 设置之间行为上的巨大差异,有什么合乎逻辑的解释吗?

另外,有没有更快的方法来测试这个?每次切换时都必须注销并重新登录很快就会变得很烦人。

【问题讨论】:

    标签: c# winforms forms scaling dpi


    【解决方案1】:

    对于你观察到的东西没有简单的解释。

    无需经历痛苦的​​登录周期即可对此进行测试的一种廉价方法是在 OnLoad 方法中更改表单的 Font 属性:

        protected override void OnLoad(EventArgs e) {
            this.Font = new Font(this.Font.FontFamily, this.Font.SizeInPoints * 120f / 96f);
            base.OnLoad(e);
        }
    

    【讨论】:

    • 这似乎没有改变任何东西。
    • 当然应该,在一个小测试项目上尝试一下。您在表单中看不到效果应该是您无法使其正常工作的原因。
    • 另一种测试方法是拥有多个虚拟机。
    【解决方案2】:

    查看表单的AutoScaleMode。它可能设置为 Font 或 Dpi

    【讨论】:

    • 当然,这就是它可以扩展的原因。
    • 设置为字体。我将其更改为 Dpi,但这似乎没有任何改变。
    【解决方案3】:

    添加到 John Arlen 的帖子中:

    您可能还希望使用AutoSizeMode 允许表单增长和收缩。

    【讨论】:

    • 表单可以正常增长和缩放。它的一些控件没有。我将扩展我的问题以包括哪些类型的控件。
    【解决方案4】:

    关于“另外,有没有更快的方法来测试这个?每次切换时都必须注销并重新登录很快就会变得很烦人。”

    最好的办法是使用具有不同 DPI 设置的虚拟机。 您只需从“真实”机器上运行您的应用程序。

    【讨论】:

      猜你喜欢
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多