Vb.Net缩放,最大值增加后再返回

Vb.Net缩放,最大值增加后再返回,vb.net,Vb.net,我尝试在最大化上缩放窗体宽度为3x高度为2.5x的控件,然后在窗体规格化时将其返回到正常状态。这些%并不是基于表单本身实际增加的%(控件有时会根据表单大小变得太大) 关于最大化,如下所示: 控制比例(3,2.5) 但是,当你正常化时: 控制比例(-3,-2.5) 结果是0,0。有更好的方法吗?我用头敲击键盘已经有一段时间了 完整代码如下: Public Class TestMainMenu Dim intStaticWidth As Integer = 263 'Form

我尝试在最大化上缩放窗体宽度为3x高度为2.5x的控件,然后在窗体规格化时将其返回到正常状态。这些%并不是基于表单本身实际增加的%(控件有时会根据表单大小变得太大)

关于最大化,如下所示: 控制比例(3,2.5)

但是,当你正常化时: 控制比例(-3,-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
Public类testmain菜单
Dim intStaticWidth作为整数=263'表单设计宽度
尺寸intStaticHeight为整数=157'形状设计高度
Dim intFontSize为整数=8'默认字体大小
Dim intBaseHeight作为整数=157'用于字体缩放
'--------
Dim dblWidthPercent作为“增加/减少百分比”的两倍
Dim dblHeightPercent作为“增加/减少百分比”的两倍
Dim blnFormLoad为布尔值=真
Dim blndonence As Boolean=True“每个表单标记一次”
私有子表单1_Load(发送方作为对象,e作为System.EventArgs)处理Me.Load
Me.Width=intStaticWidth
Me.Height=intStaticHeight
blnFormLoad=False
端接头
私有子表单Resize(发送者作为对象,e作为System.EventArgs)处理Me.Resize
如果blnFormLoad=True,则退出Sub
尺寸大小调整为SizeF
选择Case Me.WindowState
案例窗体窗口状态。最大化
如果BLNDONCE=True,则
dblWidthPercent=Me.Width/intStaticWidth
dblHeightPercent=Me.Height/intStaticHeight
blndonence=False
如果dblWidthPercent>3,则
如果dblWidthPercent>3,则
dblHeightPercent=(3*dblHeightPercent)/dblWidthPercent
如果结束
dblWidthPercent=3
如果结束
如果结束
如果dblWidthPercent<1,则dblWidthPercent=(Math.Abs(dblWidthPercent)*-1)
如果dblHeightPercent<1,则dblHeightPercent=(Math.Abs(dblHeightPercent)*-1)
ResizeRatio=新的SizeF((dblWidthPercent),(dblHeightPercent))
案例窗体窗口状态。最小化
案例窗体窗体状态。正常
如果dblWidthPercent>1,则dblWidthPercent=(Math.Abs(dblWidthPercent)*-1)
如果dblHeightPercent>1,则dblHeightPercent=(Math.Abs(dblHeightPercent)*-1)
ResizeRatio=新的SizeF((dblWidthPercent),(dblHeightPercent))
其他情况
结束选择
对于Me中的每个控件。控件
ResizeControl(控件,ResizeRatio)
下一个
blnFormLoad=False
端接头
专用子ResizeControl(ByVal对象控件作为控件,ByVal ResizeRatio作为SizeF)
Dim dblPercent为双精度
“重置
intFontSize=8
对象控制比例(ResizeRatio)
选择Case Me.WindowState
案例窗体窗口状态。最大化
dblPercent=Me.Height/intBaseHeight
如果dblPercent>3,则dblPercent=3
如果dblPercent<1,则
intFontSize=(intFontSize*dblPercent)+intFontSize
其他的
intFontSize=(intFontSize*dblPercent)
如果结束
objControl.Font=新字体(“”,intFontSize,FontStyle.Regular)
案例窗体窗口状态。最小化
案例窗体窗体状态。正常
objControl.Font=新字体(“”,intFontSize,FontStyle.Regular)
其他情况
结束选择
端接头
私有子btnClose\u单击(发件人作为System.Object,e作为System.EventArgs)处理btnExit。单击
终点
端接头
末级

您不希望按相同的大小进行缩放,而是按原始缩放因子的倒数进行缩放。因此,您需要的不是-2.5和-3,而是(1/2.5)和(1/3),或者0.4和.333333。。。分别。

哇,我真不敢相信我没听懂。。。我欠你谢谢!