【问题标题】:How do I get the 96x96 DPI Size of the current form如何获得当前表单的 96x96 DPI 大小
【发布时间】:2014-05-01 15:56:06
【问题描述】:

我正在为我的公司修改一段现有代码。我们目前有自己的自定义表单,它将其大小存储在配置文件中,这样当用户返回时,窗口的大小与以前相同。我注意到的问题是,在使用更高的 DPI 设置进行测试后,存储的大小是该 DPI 设置下所需的最小大小的膨胀大小。举个例子,我有一个 374 x 243、96x96 DPI 的登录表单。当我以 150% 加载应用程序时,表单扩展为 695x467,比任一方向的尺寸都略小一倍。如果我将计算机的 DPI 改回 100%,登录表单将保持在 695x467,在该 DPI 下显示更大。

我们用来存储大小的代码如下:

        AppConfig.GetAppConfig().SetFormAttrValue(Name, "LocationX", Location.X);
        AppConfig.GetAppConfig().SetFormAttrValue(Name, "LocationY", Location.Y);

        AppConfig.GetAppConfig().SetFormAttrValue(Name, "Width", Size.Width);
        AppConfig.GetAppConfig().SetFormAttrValue(Name, "Height", Size.Height);

是否有一个好的属性可以读取以获取表单的非缩放大小?我的怀疑是,基于尺寸从 100% 到 150% 的非线性增加变成超过 185% 的增加,这将是一个比我想要的更难破解的坚果(我最初希望能够基于Graphics.DpiXGraphics.DpiY 对象进行转换),但我想我会问,以防有人知道一个简单的答案。谢谢。

【问题讨论】:

  • 我相信有人会为您解答,但老实说,您存储表单大小的方式就是这样,表单的大小...如果您弄乱了 DPI/放大你的桌面,表格的大小完全没有变化,这很正常。无论如何,它应该保留设置大小的参数,而不是大小 VS 缩放参数......无论如何。
  • @MaxOvrdrv:那将是理想的,但不幸的是,它似乎并没有那样工作。 Size 值明显不同,尽管我认为可能必须将表单设置为 AutoSize 以适应其中的控件。为新的 DPI 设置增加控件并增加表单。
  • 你试过调试吗?例如:在表单上放置一个按钮进行测试,然后在按钮单击事件中,触发一个消息框,告诉您表单的实际大小。更改 DPI、警报大小,现在您知道系统在每个 DPI 设置上看到的大小...;) -- AutoSize 可能是一个很好的检查/开始查看大小是否在 DPI 更改时发生变化的地方。跨度>
  • @MaxOvrdrv:是的。这就是我得到上面数字的方式。这也是正在存储的增加的大小。对于我正在测试的表单,一个登录屏幕,我们可以通过简单地禁用保存调整大小来修复它,但它也会显示在我们的其他表单上。
  • 好的...让我研究一下,我会为你发布一个解决方案。我确信可以使用一些计算来确定合适的尺寸......可能在明天之前

标签: c# winforms forms resize dpi


【解决方案1】:

我为您提供的唯一答案是一种解决方法...如果是我,我会简单地存储表单的大小和 DPI 标题,以便获得正确的...

在 C# 中从屏幕获取 DPI:

using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
{
    float dpiX = graphics.DpiX;
    float dpiY = graphics.DpiY;
}

有了这些信息,您可以在配置文件中保存基于 DPI 的表单大小...然后根据上述 DPI 的读数加载适当的大小。您的配置值的名称可能类似于“Size_At_96_96”,然后该值将是表单的大小......

对不起,如果我没有更多的答案给你,但我发现除非你使用 WPF,否则你所经历的一切都会发生在每个人身上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多