本文主要解决两个问题* C# Winform高DPI字体模糊.* 高DPI下(缩放>100%), UI设计器一直提示缩放到100%, 如果不重启到100%,设计的控件会乱飞. 







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 } }}
app.manifest, 文件名用默认,修改
取消这段的注释,打开感知 DPI
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> </windowsSettings> </application>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="Properties\Resources.Designer.cs"> <DesignTime>True</DesignTime> <AutoGen>True</AutoGen> <DependentUpon>Resources.resx</DependentUpon> </Compile> </ItemGroup> <ItemGroup> <EmbeddedResource Update="Properties\Resources.resx"> <Generator>ResXFileCodeGenerator</Generator> <LastGenOutput>Resources.Designer.cs</LastGenOutput> </EmbeddedResource> </ItemGroup></Project>using System;using System.Windows.Forms;Program.cs注释掉 ApplicationConfiguration.Initialize();
运行选择 net461
备注:我的屏幕是 2800 x 1800 ,缩放 175%

果然, 显示尺寸不对

public Form1(){ AutoScaleMode = AutoScaleMode.Dpi; //添加这句,要在'InitializeComponent();'上方 InitializeComponent();}再次运行

完美!

完美!双倍的快乐!
app.manifest, 打开感知 DPITargetFrameworks 改为双目标框架 <TargetFrameworks>net6.0-windows;net461;</TargetFrameworks>Program.cs注释掉 ApplicationConfiguration.Initialize();https://github.com/densen2014/WinformHighDPICompatibleProgram
https://gitee.com/alexchow/WinformHighDPICompatibleProgram
原文链接 https://www.cnblogs.com/densen2014/p/16142939.html