Я пытаюсь написать программу в vb 2010, которая не зависит от разрешения экрана.
Я проектирую программу в 1920 * 1080, и когда я изменяю разрешение, например, на 800 * 600, все взрывается, иПрограмма не помещается на экран.Как я могу это исправить?
Я пробовал три разных подхода:
перебрать все элементы управления и масштабировать их положение и размеры
Friend Sub ResizeControl(ByRef ctl As Control)
'---------------------------- GET SCALES -------------------------
Dim DesignScreenWidth As Integer = 1920
Dim DesignScreenHeight As Integer = 1080
Dim CurrentScreenWidth As Integer = Screen.PrimaryScreen.Bounds.Width
Dim CurrentScreenHeight As Integer = Screen.PrimaryScreen.Bounds.Height
'Ratios
Dim ratioX As Double = CurrentScreenWidth / DesignScreenWidth ' e.g. 800/1920
Dim ratioY As Double = CurrentScreenHeight / DesignScreenHeight
With ctl
Dim height As Integer = Math.Min(.Height, CurrentScreenHeight)
Dim width As Integer = Math.Min(.Width, CurrentScreenWidth)
'Position
If (.GetType.GetProperty("Top").CanRead) Then .Top = CInt(.Top * ratioY)
If (.GetType.GetProperty("Left").CanRead) Then .Left = CInt(.Left * ratioX)
'Size
If (.GetType.GetProperty("Width").CanRead) Then .Width = CInt(width * ratioX)
If (.GetType.GetProperty("Height").CanRead) Then .Height = CInt(height * ratioY)
End With
'---------------------- RESIZE SUB CONTROLS -------------------------------
For Each subCtl As Control In ctl.Controls
ResizeControl(subCtl)
Next subCtl
End Sub
Прикрепите каждый элемент управления к основной форме и измените размер только основной формы
пытался перейти в режим AutoScale
Dim factorX As Double = ratioX * 96.0F
Dim factorY As Double = ratioY * 96.0F
Dim newSize As SizeF = New SizeF(factorX, factorY)
AutoScaleDimensions = newSize
AutoScaleMode = AutoScaleMode.Dpi
Scale(newSize)
Font = New Font(Font.FontFamily, Font.Size * factorX)
Ни один из этих методов не сработал для меня.Что я делаю неправильно?Одна вещь, которую я понял, заключалась в том, что моя основная форма больше 800 * 600 пикселей, поэтому, когда я запускаю конструктор с разрешением 800 * 600, VS сокращает значение с до 812 пикселей, поэтому мои вычисления с и, соответственно, коэффициент масштабирования становятся неверными.Эта ошибка применима ко всем трем методам.
Посоветуйте, пожалуйста, лучший метод и если я что-то не так делаю.