WinForms适配多比例Windows缩放 避免GUI修改后重写Designer.cs方案咨询
WinForms SplitContainer DPI适配两全方案
方案1:自定义DPI感知SplitContainer(推荐)
不需要修改原有业务逻辑和布局操作习惯,一劳永逸解决问题:
- 新建类
DpiAwareSplitContainer,继承原生SplitContainer,代码如下:
using System.Drawing; using System.Windows.Forms; public class DpiAwareSplitContainer : SplitContainer { public DpiAwareSplitContainer() { AutoScaleMode = AutoScaleMode.Font; AutoScaleDimensions = new SizeF(6F, 13F); } }
- 编译项目后,自定义控件会自动出现在VS工具箱中,直接替换窗体中原有的
SplitContainer即可 - 原有
SplitContainer内部的所有控件、布局、绑定的业务代码完全不需要修改,设计器中可以正常预览、编辑布局,配置逻辑固化在控件内部不会被设计器自动生成的代码覆盖
方案2:窗体构造函数批量配置
如果不想替换原有控件,可以直接在窗体业务代码中添加配置逻辑,完全不触碰Designer.cs文件:
- 打开窗体的代码文件,在构造函数的
InitializeComponent()调用后添加如下逻辑:
public 你的窗体类名() { InitializeComponent(); // 递归配置所有SplitContainer的DPI适配参数 void ConfigSplitContainerDpi(Control parent) { foreach (Control ctl in parent.Controls) { if (ctl is SplitContainer sc) { sc.AutoScaleMode = AutoScaleMode.Font; sc.AutoScaleDimensions = new SizeF(6F, 13F); } if (ctl.HasChildren) ConfigSplitContainerDpi(ctl); } } SuspendLayout(); ConfigSplitContainerDpi(this); ResumeLayout(); PerformAutoScale(); }
- 代码写在窗体的业务代码区域,不会被设计器的自动重建操作覆盖,原有设计器的可视化编辑功能完全保留
两种方案均可以保证应用在125%、150%等任意Windows缩放比例下GUI正常适配,不会出现控件大小、布局异常问题。
内容的提问来源于stack exchange,提问作者Dan W
相关产品推荐
相关产品推荐

