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

这篇具有很好参考价值的文章主要介绍了手把手教会 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.com/SMI/2005/WindowsSettings">true</dpiAware>
			<longPathAware xmlns="http://schemas.microsoft.com/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="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>
  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.com/densen2014/WinformHighDPICompatibleProgram

https://gitee.com/alexchow/WinformHighDPICompatibleProgram

原文链接
https://www.cnblogs.com/densen2014/p/16142939.html文章来源地址https://www.toymoban.com/news/detail-466555.html

到了这里,关于手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IntelliJ IDEA安装教程,三分钟手把手教会,非常简单!

    链接:JDK安装教程 1、进入官网 官网地址:https://www.jetbrains.com/ ​ 2、点击【Developer Tools】开发者工具,选择【IntelliJ IDEA】点击跳转。 ​ 3、来到IntelliJ IDEA界面,点击【Download】跳转到下载页面 ​ 4、然后你会看见旗舰版和社区版两个版本,旗舰版的组件很全面,但是要钱(

    2024年03月14日
    浏览(62)
  • 手把手教会Git分布式系统版本管理工具

    前言 一、Git是什么? 1.1 版本控制器的概念 1.2 Git的强大 1.3 Git的安装 二、Git 基本操作 2.1 创建 Git 本地仓库 2.2 认识⼯作区、暂存区、版本库 2.3 add、commit命令 2.4 Git log命令 2.5 .git文件 index: 暂存区,git add 后会更新该内容。 HEAD: 默认指向 master 分⽀的⼀个指针。 refs/heads/ma

    2024年04月14日
    浏览(55)
  • Socket实现服务器和客户端(手把手教会)

    😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《网络编程实战》系列专栏,相信一份耕耘一份收获,我会手把手教分享网络编程实战内容,届时可以拳打字节,

    2024年04月12日
    浏览(54)
  • 手把手教会搭建网站详细全过程(从域名到网站部署)

    过年在家,闲的没有什么事做,刚好在之前通过腾讯的学生认证购买了部署了一个轻量应用服务器,可以用来建站。想到可以用自己域名建一个专属网站,做一回站长就好激动 刚刚提到了腾讯的学生认证购的轻量应用服务器,这个挺实惠的,这里推销一波😁。 腾讯轻量应用

    2023年04月08日
    浏览(46)
  • VMware下载到安装Centos7详细教程(手把手教会)

    一、安装前的准备工作 VMware下载官网:VMware 中国 - 交付面向企业的数字化基础 | CN Centos镜像文件:CentOS-7-x86_64-Minimal-2009.iso 二、开始下载安装VMware 1、选择下一步安装  2、选择VMware安装位置 3、完成VMware安装 三、开始安装Centos7 1、打开VMware,点击“创建新的虚拟机”   2、选

    2024年02月09日
    浏览(53)
  • 【初识数据结构】手把手教会你时间复杂度的计算方法

    前言   大家好啊,这里是幸麟 一名普通的大学牲 🧩希望可以不断的进步,因此也一直在学习 如果有写的不好或者写错的地方 欢迎在评论区指正 前言后的小前言 不知道在大家学习算法时有没有遇到这样一种情况,在看大佬题解或者讲解视频时 总能找到一个叫 时间复杂度

    2024年02月09日
    浏览(92)
  • Python爬虫入门教程!手把手教会你爬取网页数据

    其实在当今社会,网络上充斥着大量有用的数据,我们只需要耐心的观察,再加上一些技术手段,就可以获取到大量的有价值数据。这里的“技术手段”就是网络爬虫。今天就给大家分享一篇爬虫基础知识和入门教程: 爬虫就是自动获取网页内容的程序,例如搜索引擎,Go

    2023年04月26日
    浏览(115)
  • 【渗透测试】漏洞扫描AWVS安装使用教程,三分钟手把手教会,非常简单

    Acunetix Web Vulnerability Scanner(简称AWVS)是一个 自动化 的Web漏洞扫描工具,它可以扫描任何通过 Web浏览器访问 和 遵循HITP/HTTPS 规则的Web站点。 AWVS原理是基于 漏洞匹配方法 ,通过 网络爬虫 测试你的网站安全,检测流行安全 AWVS可以检测什么漏洞,它有什么优势? AWVS可以通过

    2024年01月25日
    浏览(65)
  • 数据结构->顺序表实战指南,(手把手教会你拿捏数据结构顺序表)

    文章目录 ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 今天开始我们正式进入数据结构的学习了,这篇简单了解一下: 线性表的存储结构:顺序存储结构、链式存储结构; 顺序表的定义:用一段物理地址连

    2024年01月25日
    浏览(65)
  • 10年测试工程师 —— 手把手教会你做前端性能测试(超详细)

    普通用户如何评价一个网站的体验好不好呢? 除了满足他的功能需求以外,用得爽不爽可能是最大的评估因素。这个爽不爽可以简单理解为快不快,好不好看,是不是符合他的操作习惯等等。而这里的快不快就是我们说的性能。 有数据表明,性能在一定程度上跟公司的收益

    2024年02月13日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包