前言:之前的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 软件没有生成清单按钮,那么可以用另外的方法:
手动添加清单文件,再关联到项目中。步骤很简单,按以下操作来:
第一步:手动添加「应用程序清单文件」到项目
-
右键点击你的项目名称(比如:
WannaIMU)→ 选择「添加」→ 「新建项」(或直接按Ctrl+Shift+A); -
在「添加新项」窗口中,左侧选择「Visual C# 项」→ 「Windows 桌面」;
-
右侧找到「应用程序清单文件」(图标是 XML 文件样式,名称默认是
app.manifest); -
确保「名称」保持
app.manifest(无需修改),点击右下角「添加」按钮; -
添加后,解决方案资源管理器中会出现
app.manifest文件(和Form1.cs同级)
第二步:将自定义清单关联到项目(让它生效)
- 右键点击项目 → 「属性」→ 「应用程序」选项卡;
- 往下滚动到「资源」区域,找到「清单」下拉框;
- 点击下拉框,选择「浏览」→ 找到项目根目录下刚添加的
app.manifest→ 选中后点击「打开」; - 此时「清单」下拉框会显示
app.manifest(或「嵌入的资源(app.manifest)」),说明关联成功;
第三步:修改清单中的 DPI 配置(和之前一致)
- 双击
app.manifest打开文件; - 找到
<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 配置。