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 配置。

相关推荐
playboy1349 小时前
NAS不能访问共享文件夹数据恢复
大数据·计算机外设
卢锡荣11 小时前
一线通桌面显示器优选芯|乐得瑞 LDR6021Q
计算机外设
每周报刊3 天前
竞速座舱级视界:爱攻 AGP497UCZD 超宽 QDOLED 显示器解析
数据结构·游戏·计算机外设
小幂同学4 天前
笔记本触控板能用鼠标连点器吗?快捷键与位置问题解析
计算机外设·鼠标连点器·连点器
集芯微电科技有限公司5 天前
700V/17A高频开关低导通阻GaN HEMT驱动器适用于快充,LLC,PFC功率校正
人工智能·嵌入式硬件·深度学习·神经网络·机器学习·生成对抗网络·计算机外设
科技每日热闻6 天前
爱攻AGON霸天Max QD-OLED曲面电竞显示器AGP497UCZD重磅上市
科技·计算机外设
CoreTK_EMC6 天前
显示器 EMC 整改:干扰溯源、多接口处理与量产工程实践
计算机外设·芯通康·显示器 emc 整改·lvds edp emc·显示器 re 辐射超标·hdmi 接口 esd·显示器花屏闪屏
云上工程笔记6 天前
4K 显示器只能跑 30Hz 怎么办:从刷新率、HDMI 接口到线材的排查方法
计算机外设
zhonyu鱼6 天前
Escrcpy:用电脑键盘鼠标操作安卓手机的跨平台投屏工具
android·计算机外设·电脑
荣合技术服务7 天前
安装Windows Server 2008系统时 USB 鼠标键盘无法操作的解决方案
服务器·计算机外设·windows2008