我正在我的华硕NV 552笔记本电脑上开发一个C# WinForms for .NET 4.0的VS 2017应用程序。为了舒适地工作,我在Windows 10 Pro Creators更新中将系统比例因子设置为300%。当我编译和启动项目时,窗体的大小与我在VS设计器中看到的不同,似乎,对于大的窗体大小,.NET完全停止重新计算窗体大小。
例如,当窗体的Size
属性在VS属性浏览器中设置为1606; 1284
时,通过exe显示的窗体在屏幕上的结果大小为421 x285。但是,当我在设计器中调整窗体大小(例如调整为1943 x1284)时,我在exe中看到的窗体大小也是421 x285!
而且,看起来,对于较小的尺寸,我甚至看到结果形式的宽度和高度比例不合适。
下面是Size
等于1606; 1284
时.designer.cs文件中此表单的相应自动缩放设置,如果有帮助的话:
this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 37F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1570, 1181);
我知道默认情况下VS 2017会生成不支持DPI的exe应用程序,如果窗体在exe中显示时以像素为单位减小(就像是为96 ppi开发的一样),这也没关系。Microsoft在发布.NET Framework 4.7时解决了这个问题-现在我们可以使用app.config中的以下设置(根据High DPI support in Windows Forms)使我们的WinForms窗体支持DPI:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>
但是我需要解决老的遗留的不支持DPI的WinForms应用程序的问题。有解决方案吗?
请不要写无用的评论,其中包含像“WinForms是死的”和“切换到WPF”这样的短语。只有当你有想法如何改善WinForms项目中描述的行为时才写。
2条答案
按热度按时间3pmvbmvn1#
WinForms Designer在启用HDPI缩放时无法正常工作。您可以通过将VisualStudio进程声明为不支持DPI来改善您的体验,如此博客文章中所述:https://code4ward.net/2016/11/29/visual-studio-winforms-designer-on-highdpi/
不幸的是,没有简单的方法来转换现有的应用程序,以支持DPI的认识,每个表格必须单独工作。
谢谢你坦尼娅
0s0u357o2#
布局〉自动缩放模式中有一个Form属性;当我把它设置为“Dpi”时,它对我很有效。