c# AutoScaleMode设置为DPI,控件布局错位的问题

前言:之前的winForm布局,总是不能做到所见即所得,很烦。将winForm的autoscalemode 属性设置为dpi。可以做到不同的PC设备具备同样的布局观感。

autoscalemode 可以设置为dpi, font, none 三种。是选font好,还是dpi好,还是none好?建议优先选择 Dpi ,其次是 Font,不推荐 None

Dpi: 按屏幕 DPI(每英寸像素数)缩放界面,适配高 DPI 显示器(如 4K 屏、笔记本高分屏),跨不同 DPI 设备运行(如工业平板 + 台式机)
Font: 按系统默认字体大小缩放界面,适配不同字体设置(如用户放大系统字体),固定 DPI,但需要适配不同字体大小的场景​​​​​​​
**None:**不自动缩放,界面尺寸固定(像素级固定),仅在单一固定设备上运行(如专用工业控制器)

优先选「Dpi」模式(推荐)
  • 工业场景中越来越多设备是高 DPI 屏(如 4K 工控屏),Dpi模式能避免界面模糊、控件错位(比如你新增的CheckedListBox、日志文本框不会因 DPI 缩放而重叠)

  • 你的界面有固定尺寸的控件(如按钮Size = (108,104)),Dpi模式会按比例缩放控件大小和间距,保持布局一致性;

  • .NET Framework 4.6 及以上对Dpi模式支持完善(工业项目常用.NET Framework 4.5+,完全兼容)。

注意事项:

项目属性中开启「DPI 感知」(关键!否则Dpi模式无效):

右键项目 → 属性 → 应用程序 → 点击「清单」按钮 → 在清单文件中添加:

XML 复制代码
<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware>
  </windowsSettings>
</application>

避免使用绝对像素坐标布局(如Control.Location = new Point(10,20)),尽量用「锚点(Anchor)」或「停靠(Dock)」布局(比如txtRpdoLog设置Dock = Bottom,自动适配窗口大小)。

如果您的visual studio 软件没有生成清单按钮,那么可以用另外的方法:

手动添加清单文件,再关联到项目中。步骤很简单,按以下操作来:

第一步:手动添加「应用程序清单文件」到项目

  1. 右键点击你的项目名称(比如:WannaIMU)→ 选择「添加」→ 「新建项」(或直接按 Ctrl+Shift+A);

  2. 在「添加新项」窗口中,左侧选择「Visual C# 项」→ 「Windows 桌面」;

  3. 右侧找到「应用程序清单文件」(图标是 XML 文件样式,名称默认是 app.manifest);

  4. 确保「名称」保持 app.manifest(无需修改),点击右下角「添加」按钮;

  5. 添加后,解决方案资源管理器中会出现 app.manifest 文件(和 Form1.cs 同级)

第二步:将自定义清单关联到项目(让它生效)

  1. 右键点击项目 → 「属性」→ 「应用程序」选项卡;
  2. 往下滚动到「资源」区域,找到「清单」下拉框;
  3. 点击下拉框,选择「浏览」→ 找到项目根目录下刚添加的 app.manifest → 选中后点击「打开」;
  4. 此时「清单」下拉框会显示 app.manifest(或「嵌入的资源(app.manifest)」),说明关联成功;

第三步:修改清单中的 DPI 配置(和之前一致)

  1. 双击 app.manifest 打开文件;
  2. 找到 <application> 节点(默认内容如下,可能被注释,需解除注释或替换):
XML 复制代码
<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <!-- 开启Per-Monitor DPI感知v2(兼容Win10/11工业设备) -->
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">PerMonitorV2,PerMonitor</dpiAware>
    <!-- 禁用系统自动拉伸,避免双重缩放 -->
    <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
  </windowsSettings>
</application>

这样就完成了自定义清单的添加和 DPI 配置。

相关推荐
网络探索者19 小时前
换了新显示器怎么验?我做了一个开箱即用的全平台屏幕检测工具
计算机外设
weixin_4239950021 小时前
unity 物体转向鼠标点击方向2d和3d
unity·计算机外设·游戏引擎
破烂儿2 天前
TMUX历史输出滚动查看全攻略(原生快捷键 + 鼠标配置优化)
服务器·学习·计算机外设
开开心心就好3 天前
支持自定义名单的实用随机抽签工具
windows·计算机视觉·计算机外设·excel·散列表·启发式算法·csdn开发云
梁山好汉(Ls_man)3 天前
建议鸿蒙系统增加虚拟鼠标功能
华为·计算机外设·harmonyos
杰杰桀桀桀3 天前
4*4无时延矩阵键盘(非阻塞)--附代码链接
stm32·单片机·嵌入式硬件·矩阵·计算机外设·无时延矩阵键盘
淮北4943 天前
全键盘最后一公里warpd
计算机外设
ZC跨境爬虫4 天前
Playwright模拟鼠标滚轮实战:从原理到百度图片_豆瓣电影爬取
爬虫·python·计算机外设
sxjk19876 天前
每日一问-20260405--戴尔显示器型号命名速查表
计算机外设
chenqianghqu6 天前
win10远程桌面访问桌面版ubuntu22.04(无显示器)
计算机外设