Windows10显示缩放导致Visual Studio 2017 WinForm窗体设计器在高DPI下设计时界面/布局/大小问题

目录

 

一、问题

二、解决方案

三、最佳解决方案

(1)打开注册表编辑器(WIN+R组合键,输入regedit)

(2)导航

(3)新建字符串值

 (4)填写数值名称(最好找到自己的VS启动程序的路径,黏贴进去)

(5)填写数值数据(注意填写完整,少一个字符多一个字符都不行)

 (6)验证结果

四、总结


一、问题

图1 VS2017以上版本窗体设计器显示问题
图1 VS WinForm窗体设计器显示问题(信息栏是Visual Studio 2017 15.8版中引入的)

可以看到当你打开一个WinForm窗体设计器的时候,设计器上方出现一个黄色信息警示条,那么你肯定是Windows10显示设置里设置了非100%的DPI缩放(HDPI缩放),那么你设计好的窗体界面在运行时就会出现大小、布局等等特征都不一致的情况,甚至出现控件重叠的问题。

Win10显示缩放
图2 Win10显示缩放设置
  1. 你不想把显示设置改回100%,既然设置了缩放肯定是有原因的;
  2. 你想将VS单独设置100%的缩放,但Windows10好像没有这个设置选项;
  3. 你经常使用WinForm窗口设计器,又不想每次打开项目,再点击,再重启等等一系列繁琐操作(注意:一定是WinForm窗口设计器,至于为什么,看下面的可行性分析);

二、解决方案

  1. 首先最简单的解决方案:每次VS显示这个信息栏的时候,点选 “使用100%缩放比例重新启动 Visual Studio ” 选项;
  2. 无可奈何的解决方案:将Win10缩放设置改回100%(奇怪,我为什么要说这个方案。。划掉);
  3. 最佳解决方案:设置 Visual Studio 软件忽略Windows10的DPI显示缩放;

三、最佳解决方案

  1. 可行性

方案3之所以可行就是因为Visual Studio 本身支持Win10的DPI缩放,表征为在1K以上分辨率的显示器如2K、4K显示器上显示软件时能以正常大小显示(放大了);

但是VS的WinForm窗体设计器却不支持自动HDPI缩放,其表征为在设计窗体时,各种窗体、控件、布局都是按照未缩放的状态(1K分辨率显示器的效果)显示的;(详细可搜索查看"DPI虚拟化")

这样的总体效果就是:(VS软件被放大了,) WinForm窗体未放大,编译好的WinForm窗体程序又被放大了,所以看起来比设计时的窗体要大,控件布局也不一样。

2. 操作步骤

(1)打开注册表编辑器(WIN+R组合键,输入regedit)

注册表编辑器
图3 打开注册表编辑器

(2)导航

计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

(3)新建字符串值

新建字符串值
图4 新建字符串值

 (4)填写数值名称(最好找到自己的VS启动程序的路径,黏贴进去)

根据你使用的Visual Studio版本,使用不同的值(对应更改2017/2019,C/D盘等等)

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe

(5)填写数值数据(注意填写完整,少一个字符多一个字符都不行

DPIUNAWARE 

编辑字符串
图5 编辑字符串

填写好了大概长这样:(注意图中数据值少了一个'E')

注册表
图6 注册表设置(注意图中数据值少了一个'E')

 (6)验证结果

关闭所有VS窗口;

重新启动VS,并打开一个窗体设计器;

处理结果
图7 操作结果

四、总结

  1. 可以看到这种方法还是比较简单有效的,对于经常用VS设计窗体的你来说肯定方便了许多;
  2. 不足之处就是软件整体不缩放了,那么就会出现   在HDPI(分辨率大于1K)的显示器上显示   时,VS软件的文本、控件等等比较小的问题,对操作和使用有一定的影响;
  3. 第2点的问题只影响了VS这个软件,你使用其它软件一点都不影响;
  4. 而且如果你做完了这个项目就不怎么使用WinForm窗体设计器了,那你直接删了那个注册表字符串就可以了,甚至你不删,改一个数值数据(如图6)的字符都能使VS恢复使用Win10的缩放;
  5. 另外,你还能点击 “ 使用自动缩放比例重新启动 Visual Studio ” 选项;
  6. 如果你用其它软件的时候也遇到类似的问题,都可以通过这个问题解决;
  7. 当然真正最佳的解决方案应该是等微软公司把Visual Studio的WinForm窗体设计器也适配Windows10的自动缩放功能了;毕竟现在高分辨率显示器已经大面积普及了;

个人经验,不足之处还请指正!

官方文档请参阅:https://docs.microsoft.com/en-us/visualstudio/designers/disable-dpi-awareness?view=vs-2019#add-a-registry-entry

  • 23
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值