设计模式与运行模式下用户控件尺寸不一致问题求助
我使用Visualbasic.net 2012开发,将用户控件的Auto scale mode设置为Inherit,普通窗体的Auto scale mode采用Windows Form默认的Font,出现了设计模式与运行模式下用户控件尺寸不一致的问题。该控件在32位Windows 7系统中设计无此问题,但在64位Windows 11系统中出现此问题。我已尝试将窗体的Auto scale mode切换为dpi、Non、Font、Inherit所有选项,同时将用户控件的Auto scale mode设为Inherit并搭配窗体不同的Auto scale mode设置,问题仍未解决。

可行解决方案
强制启用DPI感知:在项目的
app.manifest文件中添加DPI感知配置,VB.NET 2012默认未适配高DPI环境。找到<application>节点,插入以下配置:<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware> </windowsSettings> </application>若项目无
app.manifest,右键项目→添加→新建项→选择“应用程序清单文件”,生成后修改上述内容。统一缩放基准配置:将用户控件的
AutoScaleMode改为Font,同时确保窗体的AutoScaleMode也设为Font,设计时统一使用固定基准字体(如微软雅黑9pt),避免系统默认字体差异引发的缩放偏差。另外检查用户控件内所有子控件的AutoScaleMode,确保嵌套控件缩放逻辑一致。手动实现缩放逻辑:重写用户控件的
OnLoad方法,手动计算缩放比例并调整控件及子控件的尺寸、位置和字体:Protected Overrides Sub OnLoad(e As EventArgs) MyBase.OnLoad(e) ' 设计时基准DPI设为96(Windows标准DPI) Dim designDpi As Integer = 96 Dim currentDpi As Integer = Me.CreateGraphics().DpiX Dim scaleFactor As Single = currentDpi / designDpi ' 调整控件自身尺寸 Me.Size = New Size(CInt(Me.Size.Width * scaleFactor), CInt(Me.Size.Height * scaleFactor)) ' 遍历调整所有子控件 For Each ctrl As Control In Me.Controls ctrl.Location = New Point(CInt(ctrl.Location.X * scaleFactor), CInt(ctrl.Location.Y * scaleFactor)) ctrl.Size = New Size(CInt(ctrl.Size.Width * scaleFactor), CInt(ctrl.Size.Height * scaleFactor)) ctrl.Font = New Font(ctrl.Font.FontFamily, ctrl.Font.Size * scaleFactor, ctrl.Font.Style) Next End Sub关闭VS的DPI虚拟化:右键Visual Studio 2012快捷方式→属性→兼容性→勾选“高DPI缩放替代”,选择“应用程序”。让设计视图更贴近实际运行环境,减少设计与运行的显示偏差。
内容的提问来源于stack exchange,提问作者Maher

