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

相关推荐
春日见4 分钟前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
PHOSKEY1 小时前
光子精密QM系列闪测仪在鼠标电路板部件质量控制中的核心应用
计算机外设
墩墩冰2 小时前
计算机图形学 分析选择缓冲区中的数字
计算机外设
UI设计兰亭妙微7 小时前
中车株州所显示器界面设计
计算机外设·界面设计
墩墩冰8 小时前
计算机图形学 多视区的显示
计算机外设
墩墩冰8 小时前
计算机图形学 GLU库中的二次曲面函数
计算机外设
墩墩冰9 小时前
计算机图形学 利用鼠标实现橡皮筋技术
计算机外设
企鹅侠客2 天前
鼠标键盘按键统计工具
计算机外设·键盘·鼠标
华一精品Adreamer3 天前
便携式显示器供应链与成本结构:挑战与机遇
计算机外设
开开心心就好3 天前
图片校正漂白工具永久免费,矫正实时预览
网络·人工智能·windows·计算机视觉·计算机外设·电脑·excel