为什么 Visual Studio 2017 的新 AutoScale 支持在运行时调整我的 Forms 应用程序的大小?
Why is Visual Studio 2017's new AutoScale support resizing my Forms app at runtime?
我们有一个用于测试我们产品的 Windows 表单应用程序,近 10 年来它一直具有几乎相同的表单和对话框。设计器中的 AutoScaleMode 对于两种形式都设置为 Font,并且自原始设计以来没有改变。 AutoSize 设置为 false 并且只是为了很好的衡量(我猜)AutoSizeMode 设置为 GrowOnly。以下源代码行位于 Program.cs:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
请记住,这多年来一直完美无缺地工作...
VS2017 的最新更新之一包括对具有不同 DPI 的显示器的自动缩放支持。我有一个相对较高的 DPI 监视器,所以当我对设置对话框进行一些更改(添加控件等)时,我开始在设计器表面的顶部看到亮黄色横幅,告诉我自动缩放设置为 125%,我会喜欢改变吗?我尝试来回切换,当处于 100% 模式(自动缩放关闭)时,我被警告 XAML 表单可能无法正确显示。很好,我正在使用 Forms,所以我回到 "normal" 缩放并且表格看起来不错。
直到我尝试 运行ning 程序。现在,当我启动程序时,主窗体如下所示(删除细节以保护有罪的人):
...但是当我打开设置对话框时,它看起来像这样:
哎呀!它在实践中看起来更糟,这里的相关图像并不能很好地反映大小和比例的差异。
我不知道发生了什么变化或发生这种情况的方式/原因,但我无法将其投入生产。我试过更改 AutoScale 设置,但无济于事。有人可以在这里为我指出正确的方向吗?
提前致谢!
编辑:似乎只有当我 运行 调试中的应用程序时,才会在我的机器上进行重新缩放。无论是什么搞乱了我机器上的表单显示,都不会在我同事的机器上这样做,也不会复制到构建服务器生成的可执行文件中。
另一方面,我尝试了我能找到的每一个与 DPI 相关的设置,添加了那些由于程序的年龄而没有的设置,但都无济于事。我尝试过的任何事情都没有对程序在我的机器上的显示怪异产生任何影响。呃
我尝试了所有我能找到的技巧,除了完全禁用 AutoScale 之外,没有任何效果。我最终将我们的开发分支合并到我的功能分支并检查了所有 270 个编辑,为所有尺寸参数和所有控件选择了我能找到的最旧的设置。啊。
在此过程中,我偶然发现了表单的 Designer.cs 文件中的以下行:
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
据我所知,Visual Studio 的设计者无法访问此设置,我也找不到有关如何或为何设置它的任何信息。我确实发现,在按预期工作的早期版本中,值为 (8F, 17F) —— 因此我手动编辑了该行以匹配较旧的工作版本。成功!
我还检查了我的 Windows 显示设置,自定义缩放值为 100%,所以我使用了我在第一篇 link 之后找到的一篇文章中提到的注册表破解上面的评论(感谢@Jimi)在 Visual Studio 中禁用自动缩放,然后关闭通知。现在我(终于)回来了。
注册表黑客在这里:
https://docs.microsoft.com/en-us/dotnet/framework/winforms/disable-dpi-awareness-visual-studio
如果有人使用 DaveN59 的答案中提到的注册表黑客攻击,并且已经有您的 ...\devenv.exe[ 的条目=27=](我的以前设置为 运行 作为管理员)然后将 DPIUNAWARE 字符串添加到 "Data" 的末尾。确保使用 space 作为分隔符。
示例:^ RUNASADMIN DPIUNAWARE
我不确定 ^ 的用途,但它就在那里,我只是添加了 DPIUNAWARE 字符串。另外,如果你只是添加这个字符串,它会出现未缩放,但你仍然会看到黄色横幅。要关闭它,您需要 select 来自 Visual Studio 的那个选项。有关注册表黑客的说明位于 link 中,也在上面提供。为了方便起见,这里是菜单导航路径。
To disable notifications, choose Tools > Options to open the Options
dialog. Then, choose Windows Forms Designer > General, and set DPI
Scaling Notifications to False.
我们有一个用于测试我们产品的 Windows 表单应用程序,近 10 年来它一直具有几乎相同的表单和对话框。设计器中的 AutoScaleMode 对于两种形式都设置为 Font,并且自原始设计以来没有改变。 AutoSize 设置为 false 并且只是为了很好的衡量(我猜)AutoSizeMode 设置为 GrowOnly。以下源代码行位于 Program.cs:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
请记住,这多年来一直完美无缺地工作...
VS2017 的最新更新之一包括对具有不同 DPI 的显示器的自动缩放支持。我有一个相对较高的 DPI 监视器,所以当我对设置对话框进行一些更改(添加控件等)时,我开始在设计器表面的顶部看到亮黄色横幅,告诉我自动缩放设置为 125%,我会喜欢改变吗?我尝试来回切换,当处于 100% 模式(自动缩放关闭)时,我被警告 XAML 表单可能无法正确显示。很好,我正在使用 Forms,所以我回到 "normal" 缩放并且表格看起来不错。
直到我尝试 运行ning 程序。现在,当我启动程序时,主窗体如下所示(删除细节以保护有罪的人):
...但是当我打开设置对话框时,它看起来像这样:
哎呀!它在实践中看起来更糟,这里的相关图像并不能很好地反映大小和比例的差异。
我不知道发生了什么变化或发生这种情况的方式/原因,但我无法将其投入生产。我试过更改 AutoScale 设置,但无济于事。有人可以在这里为我指出正确的方向吗?
提前致谢!
编辑:似乎只有当我 运行 调试中的应用程序时,才会在我的机器上进行重新缩放。无论是什么搞乱了我机器上的表单显示,都不会在我同事的机器上这样做,也不会复制到构建服务器生成的可执行文件中。
另一方面,我尝试了我能找到的每一个与 DPI 相关的设置,添加了那些由于程序的年龄而没有的设置,但都无济于事。我尝试过的任何事情都没有对程序在我的机器上的显示怪异产生任何影响。呃
我尝试了所有我能找到的技巧,除了完全禁用 AutoScale 之外,没有任何效果。我最终将我们的开发分支合并到我的功能分支并检查了所有 270 个编辑,为所有尺寸参数和所有控件选择了我能找到的最旧的设置。啊。 在此过程中,我偶然发现了表单的 Designer.cs 文件中的以下行:
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
据我所知,Visual Studio 的设计者无法访问此设置,我也找不到有关如何或为何设置它的任何信息。我确实发现,在按预期工作的早期版本中,值为 (8F, 17F) —— 因此我手动编辑了该行以匹配较旧的工作版本。成功!
我还检查了我的 Windows 显示设置,自定义缩放值为 100%,所以我使用了我在第一篇 link 之后找到的一篇文章中提到的注册表破解上面的评论(感谢@Jimi)在 Visual Studio 中禁用自动缩放,然后关闭通知。现在我(终于)回来了。
注册表黑客在这里: https://docs.microsoft.com/en-us/dotnet/framework/winforms/disable-dpi-awareness-visual-studio
如果有人使用 DaveN59 的答案中提到的注册表黑客攻击,并且已经有您的 ...\devenv.exe[ 的条目=27=](我的以前设置为 运行 作为管理员)然后将 DPIUNAWARE 字符串添加到 "Data" 的末尾。确保使用 space 作为分隔符。
示例:^ RUNASADMIN DPIUNAWARE
我不确定 ^ 的用途,但它就在那里,我只是添加了 DPIUNAWARE 字符串。另外,如果你只是添加这个字符串,它会出现未缩放,但你仍然会看到黄色横幅。要关闭它,您需要 select 来自 Visual Studio 的那个选项。有关注册表黑客的说明位于 link 中,也在上面提供。为了方便起见,这里是菜单导航路径。
To disable notifications, choose Tools > Options to open the Options dialog. Then, choose Windows Forms Designer > General, and set DPI Scaling Notifications to False.