手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)

发布时间:2022-06-23 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文主要解决两个问题

  • C# Winform高DPI字体模糊.
  • 高DPI下(缩放>100%), UI设计器一直提示缩放到100%, 如果不重启到100%,设计的控件会乱飞.

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

建立测试程序

  1. 新建.Net Windows窗体应用 (Winform)工程

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

  1. 选择.Net6.0

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

  1. 将窗体尺寸定为 1000 x 1000 , 用于后面检测缩放是否正确

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

  1. 添加一个按钮 , 尺寸定为 150 x 50

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

  1. 添加一个图片框 , 尺寸定为 300 x 300 , 右键导入一张图片

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

  1. 添加测试代码
namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Text = this.Width + "x" + this.Height + " pic "+ pictureBox1.Width + "x" + pictureBox1.Height + 启动环境(); 

        }

        public static string 启动环境()
        {
#if NET461
            return (".NET Framework 4.6.1");
#elif NET6_0
            return (".NET6");
#endif  
        }

    }
}
  1. 运行看看效果: net6下运行,尺寸都是对的

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

正式开始

  1. 右键工程,添加应用程序清单 app.manifest, 文件名用默认,修改

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

取消这段的注释,打开感知 DPI

	<application xmlns="urn:schemas-microsoft-com:asm.v3">
		<windowsSettings>
			<dpiAware xmlns="http://schemas.microsoft wangt.cc /SMI/2005/WindowsSettings">true</dpiAware>
			<longPathAware xmlns="http://schemas.microsoft wangt.cc /SMI/2016/WindowsSettings">true</longPathAware>
		</windowsSettings>
	</application>
  1. 双击工程名称, 编辑配置文件,

TargetFrameworks 改为双目标框架 <TargetFrameworks>net6.0-windows;net461;</TargetFrameworks> , 保存后提示重载工程 , 最好是关闭vs再打开一次.

完整文件如下

<Project Sdk="Microsoft.NET.Sdk">

	<PropertyGroup>
		<OutputType>WinExe</OutputType>
		<TargetFrameworks>net6.0-windows;net461;</TargetFrameworks>
		<UseWindowsForms>true</UseWindowsForms>
		<ApplicationManifest>app.manifest</ApplicationManifest>
		<ApplicationVisualStyles>true</ApplicationVisualStyles>
		<ApplicationUseCompatibleTextRendering>false</ApplicationUseCompatibleTextRendering>
		<ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
	</PropertyGroup>

	<ItemGroup>
		<Compile Update="PropertiesResources.Designer.cs">
			<DesignTime>True</DesignTime>
			<AutoGen>True</AutoGen>
			<DependentUpon>Resources.resx</DependentUpon>
		</Compile>
	</ItemGroup>

	<ItemGroup>
		<EmbeddedResource Update="PropertiesResources.resx">
			<Generator>ResXFileCodeGenerator</Generator>
			<LastGenOutput>Resources.Designer.cs</LastGenOutput>
		</EmbeddedResource>
	</ItemGroup>
</Project>
  1. 如果提示找不到控件, 在 Form1.Designer.cs 和 Form1.cs 添加
using System;
using System.Windows.Forms;
  1. Program.cs注释掉 ApplicationConfiguration.Initialize();

  2. 运行选择 net461

备注:我的屏幕是 2800 x 1800 ,缩放 175%

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

果然, 显示尺寸不对

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

  1. Form1.cs 添加 'AutoScaleMode = AutoScaleMode.Dpi;'
public Form1()
{
    AutoScaleMode = AutoScaleMode.Dpi; //添加这句,要在'InitializeComponent();'上方
    InitializeComponent();
}

再次运行

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

完美!

  1. 双击编辑窗体,没有提示100%缩放, 添加标准菜单和DataGridView测试

手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461  net6.0 双出)

完美!双倍的快乐!

总结

  • 新建.Net Windows窗体应用 (Winform)工程 [.Net6.0]
  • 添加应用程序清单 app.manifest, 打开感知 DPI
  • TargetFrameworks 改为双目标框架 <TargetFrameworks>net6.0-windows;net461;</TargetFrameworks>
  • Program.cs注释掉 ApplicationConfiguration.Initialize();
  • AutoScaleMode = AutoScaleMode.Dpi; //添加这句,要在'InitializeComponent();'上方

老工程也可以通过编辑projet文件升级到这种新工程格式,支持本文说的功能, 需要继续出教程的请在评论区留言, 这几天都在度假中, 今天就写到这里了. 下回见!

配套DEMO

https://github wangt.cc /densen2014/WinformHighDPICompatibleProgram

https://gitee wangt.cc /alexchow/WinformHighDPICompatibleProgram

原文链接 https://www wangt.cc blogs wangt.cc /densen2014/p/16142939.html

脚本宝典总结

以上是脚本宝典为你收集整理的手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)全部内容,希望文章能够帮你解决手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: