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

相关推荐
skywalk816319 小时前
Deskflow 是一个开源的跨平台工具,用于在多台计算机之间共享鼠标和键盘。它允许用户通过一套键鼠控制多台电脑,就像操作单台机器一样流畅。
计算机外设·电脑·deskflow
TESmart碲视20 小时前
深入解析:DisplayLink 是如何把“视频”变成 USB 数据再还原成显示信号的?
计算机外设·音视频·tesmart
ACP广源盛139246256732 天前
GSV2231G@ACP#2231G产品规格详解及产品应用分享
嵌入式硬件·计算机外设·音视频
ACP广源盛139246256732 天前
GSV6505F@ACP#6505F产品规格详解及产品应用分享
单片机·嵌入式硬件·计算机外设·音视频
我的golang之路果然有问题2 天前
win键盘设置改为类似mac 配置
windows·笔记·macos·计算机外设·键盘
tyatyatya2 天前
MATLAB图形交互教程:鼠标拾取/坐标轴交互/动态绘图实战详解
开发语言·matlab·计算机外设
sc.溯琛3 天前
第 2 章 数据表示 核心重点提炼
计算机外设
Java Fans4 天前
用PyQt打造带动画、碰撞检测和键盘控制的小游戏
python·计算机外设·pyqt
土星云SaturnCloud4 天前
液冷“内卷”:在局部优化与系统重构之间,寻找第三条路
服务器·人工智能·ai·计算机外设
李斯维5 天前
MBR 和 GPT 区别
windows·嵌入式硬件·bootstrap·计算机外设