我试图在最大限度上缩放窗体宽度3x高度2.5倍的控件,然后在窗体规范化时将它们返回到正常状态。这些%'s不是基于表单本身的实际增加%(控件有时只是根据表单大小而变得太大)。
On maximize看起来像:控制。规模(2.5)
但是,当你规范化时:控制。规模(-2.5)
如果结果为0,则为0。有更好的方法吗?我已经在键盘上敲了好久了。
完整代码如下:
Public Class TestMainMenu
Dim intStaticWidth As Integer = 263 'Form design WIDTH
Dim intStaticHeight As Integer = 157 'Form design Height
Dim intFontSize As Integer = 8 'Default font size
Dim intBaseHeight As Integer = 157 'Used for FONT scaling
'--------
Dim dblWidthPercent As Double 'Percentage of increase/decrease
Dim dblHeightPercent As Double 'Percentage of increase/decrease
Dim blnFormLoad As Boolean = True
Dim blnDoOnce As Boolean = True 'Once per form flag
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Me.Width = intStaticWidth
Me.Height = intStaticHeight
blnFormLoad = False
End Sub
Private Sub FormResize(sender As Object, e As System.EventArgs) Handles Me.Resize
If blnFormLoad = True Then Exit Sub
Dim ResizeRatio As SizeF
Select Case Me.WindowState
Case FormWindowState.Maximized
If blnDoOnce = True Then
dblWidthPercent = Me.Width / intStaticWidth
dblHeightPercent = Me.Height / intStaticHeight
blnDoOnce = False
If dblWidthPercent > 3 Then
If dblWidthPercent > 3 Then
dblHeightPercent = (3 * dblHeightPercent) / dblWidthPercent
End If
dblWidthPercent = 3
End If
End If
If dblWidthPercent < 1 Then dblWidthPercent = (Math.Abs(dblWidthPercent) * -1)
If dblHeightPercent < 1 Then dblHeightPercent = (Math.Abs(dblHeightPercent) * -1)
ResizeRatio = New SizeF((dblWidthPercent), (dblHeightPercent))
Case FormWindowState.Minimized
Case FormWindowState.Normal
If dblWidthPercent > 1 Then dblWidthPercent = (Math.Abs(dblWidthPercent) * -1)
If dblHeightPercent > 1 Then dblHeightPercent = (Math.Abs(dblHeightPercent) * -1)
ResizeRatio = New SizeF((dblWidthPercent), (dblHeightPercent))
Case Else
End Select
For Each Control In Me.Controls
ResizeControl(Control, ResizeRatio)
Next
blnFormLoad = False
End Sub
Private Sub ResizeControl(ByVal objControl As Control, ByVal ResizeRatio As SizeF)
Dim dblPercent As Double
'Reset
intFontSize = 8
objControl.Scale(ResizeRatio)
Select Case Me.WindowState
Case FormWindowState.Maximized
dblPercent = Me.Height / intBaseHeight
If dblPercent > 3 Then dblPercent = 3
If dblPercent < 1 Then
intFontSize = (intFontSize * dblPercent) + intFontSize
Else
intFontSize = (intFontSize * dblPercent)
End If
objControl.Font = New Font("", intFontSize, FontStyle.Regular)
Case FormWindowState.Minimized
Case FormWindowState.Normal
objControl.Font = New Font("", intFontSize, FontStyle.Regular)
Case Else
End Select
End Sub
Private Sub btnClose_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
End
End Sub
End Class
您要按原始比例因子的倒数进行缩放,而不是按相同的幅度进行负缩放。所以你想要的不是-2.5和-3,而是(1/2.5)和(1/3),或者0.4和。333333…分别。