如何检测用户的字体(DPI)是否设置为小,大或其他?

Did*_*evy 7 .net vb.net windows dpi winforms

我需要找出用户的屏幕是否设置为正常96 dpi(小尺寸),大120 dpi字体或其他东西.我如何在VB.NET(首选)或C#中做到这一点?

Cod*_*ray 13

最好的办法就是让形式自动调整自身的大小,根据用户当前的DPI设置.要做到这一点,只需将AutoScaleMode属性设置为AutoScaleMode.Dpi并启用该AutoSize属性即可.您可以从设计器中的"属性"窗口或通过代码执行此操作:

Public Sub New()
    InitializeComponent()

    Me.AutoScaleMode = AutoScaleMode.Dpi
    Me.AutoSize = True
End Sub
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要了解这些信息而绘制(如在Paint事件处理方法),您可以从中提取的信息DpiXDpiY对性能的Graphics的实例.

Private Sub myControl_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
    Dim dpiX As Single = e.Graphics.DpiX
    Dim dpiY As Single = e.Graphics.DpiY

    ' Do your drawing here
    ' ...
End Sub
Run Code Online (Sandbox Code Playgroud)

最后,如果您需要即时确定DPI级别,则必须Graphics为表单创建类的临时实例,并检查DpiXDpiY属性,如上所示.表单类的CreateGraphics方法使这很容易做到; 只需确保将此对象的创建包装在Using语句中以避免内存泄漏.示例代码:

Dim dpiX As Single
Dim dpiY As Single

Using g As Graphics = myForm.CreateGraphics()
    dpiX = g.DpiX
    dpiY = g.DpiY
End Using
Run Code Online (Sandbox Code Playgroud)