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