网站首页 > 开源技术 正文
本文主要解决两个问题
- C# Winform高DPI字体模糊.
- 高DPI下(缩放>100%), UI设计器一直提示缩放到100%, 如果不重启到100%,设计的控件会乱飞.
建立测试程序
新建.Net Windows窗体应用 (Winform)工程
选择.Net6.0
将窗体尺寸定为 1000 x 1000 , 用于后面检测缩放是否正确
添加一个按钮 , 尺寸定为 150 x 50
添加一个图片框 , 尺寸定为 300 x 300 , 右键导入一张图片
添加测试代码
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
}
}
}
运行看看效果: net6下运行,尺寸都是对的
正式开始
右键工程,添加应用程序清单 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>
如果提示找不到控件, 在 Form1.Designer.cs 和 Form1.cs 添加
using System;
using System.Windows.Forms;
Program.cs注释掉 ApplicationConfiguration.Initialize();
运行选择 net461
备注:我的屏幕是 2800 x 1800 ,缩放 175%
果然, 显示尺寸不对
Form1.cs 添加 'AutoScaleMode = AutoScaleMode.Dpi;'
public Form1()
{
AutoScaleMode = AutoScaleMode.Dpi; //添加这句,要在'InitializeComponent();'上方
InitializeComponent();
}
再次运行
完美!
双击编辑窗体,没有提示100%缩放, 添加标准菜单和DataGridView测试
完美!双倍的快乐!
总结
- 新建.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.com/densen2014/WinformHighDPICompatibleProgram
https://gitee.com/alexchow/WinformHighDPICompatibleProgram
WinformHighDPICompatibleProgram: 手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)
原文链接
手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出) - AlexChow - 博客园
猜你喜欢
- 2024-10-26 脚下每一步都是马赛克艺术(脚下走的每一步)
- 2024-10-26 Python GUI开发:PySide2使用入门(python gui程序)
- 2024-10-26 如何使用FastReport .NET 在 JetBrains Rider 中创建PDF报告?
- 2024-10-26 实战PyQt5: 002-安装和配置PyQt5开发环境
- 2024-10-26 触得到的时间--kickstarter上受到最多资助的项目
- 2024-10-26 今天再用10分钟,木辛老师带你一起走入界面布局管理的知识海洋吧
- 2024-10-26 51款工业风浴室超高逼格做法,真是太好用了
- 2024-10-26 由浅入深理解C#中的事件(c#事件的五要素)
- 2024-10-26 PYQT5学习(02):利用Qt Designer制作第一个窗口程序
- 2024-10-26 132.Python——PySide6:安装和VSCode中配置及使用
你 发表评论:
欢迎- 05-08Peking Opera Featuring National Treasure Min Fanglei Premiers in Changsha
- 05-08安卓版Opera Mini浏览器更新,增强大屏设备支持
- 05-08Opera 36.0开发者版本发布:个性化新闻+简化菜单
- 05-08Vitas发布20周年专辑《OPERA20》首支单曲
- 05-08Android 版 Opera 89 带来了大量标签页改进
- 05-08基本Spring Cloud的微服务架构搭建及应用(一)
- 05-08代码质量扫描工具SonarQube原理及环境搭建
- 05-08小心!你的这些习惯和粗心,可能正在泄露信息!丨提示
- 最近发表
-
- Peking Opera Featuring National Treasure Min Fanglei Premiers in Changsha
- 安卓版Opera Mini浏览器更新,增强大屏设备支持
- Opera 36.0开发者版本发布:个性化新闻+简化菜单
- Vitas发布20周年专辑《OPERA20》首支单曲
- Android 版 Opera 89 带来了大量标签页改进
- 基本Spring Cloud的微服务架构搭建及应用(一)
- 代码质量扫描工具SonarQube原理及环境搭建
- 小心!你的这些习惯和粗心,可能正在泄露信息!丨提示
- 一步步搭建openwrt编译环境并编译ddserver源码
- 远程办公、巡逻机器人、口罩识别……离不开一群“研发技术宅”
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)