我有一个 C# 表单应用程序,当我更改显示器 DPI 时,所有控件都会移动。
我使用了代码
this.AutoScaleMode = AutoScaleMode.Dpi
,但它没有解决这个问题。
有人有什么想法吗?this.AutoScaleMode = AutoScaleMode.Dpi
,但它没有解决这个问题。
有人有什么想法吗?由于Winform应用程序表单可能包含控件和图像,允许系统调整您的窗口大小并不是一个解决方案,但如果您能够管理每个DPI分辨率一个表单,并使用适当缩放的图像...这不是一个好主意,因为随着屏幕尺寸的增长,字体大小会减小。
当使用不同的DPI分辨率时,系统会强制您的表单重新定义其控件的大小、位置和字体,但不包括图像。解决方案是在运行时加载时更改表单的DPI,以便一切都恢复到原始大小和位置。
这是一个可能的解决方案,我已经在一个纸牌游戏应用程序中测试过了,其中我有大约80个图像按钮、TabControl等。
在每个表单的form_Load事件中,添加此代码片段:
Dim dpi As Graphics = Me.CreateGraphics Select Case dpi.DpiX Case 120 '-- Do nothing if your app has been desigbned with 120 dpi
Case Else
'-- I use 125 AND NOT 120 because 120 is 25% more than 96
Me.Font = New Font(Me.Font.FontFamily, Me.Font.Size * 125 / dpi.DpiX)
End Select