Способ best - просто позволить форме автоматически изменить свой размер в зависимости от текущих настроек DPI пользователя. Для этого просто установите для свойства AutoScaleMode
значение AutoScaleMode.Dpi
и включите свойство AutoSize
. Вы можете сделать это либо из окна свойств в конструкторе, либо с помощью кода:
Public Sub New()
InitializeComponent()
Me.AutoScaleMode = AutoScaleMode.Dpi
Me.AutoSize = True
End Sub
Или, если вам нужно знать эту информацию во время рисования (например, в методе обработчика событий Paint
), вы можете извлечь информацию из DpiX
и DpiY
свойства 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
Наконец, если вам нужно определить уровень DPI на лету, вам нужно будет создать временный экземпляр класса Graphics
для вашей формы и проверить свойства DpiX
и DpiY
, как показано выше. CreateGraphics
метод класса формы делает это очень простым; просто убедитесь, что вы обернули создание этого объекта в оператор Using
, чтобы избежать утечек памяти. Пример кода:
Dim dpiX As Single
Dim dpiY As Single
Using g As Graphics = myForm.CreateGraphics()
dpiX = g.DpiX
dpiY = g.DpiY
End Using