Vb.Net缩放,最大值增加后再返回
我尝试在最大化上缩放窗体宽度为3x高度为2.5x的控件,然后在窗体规格化时将其返回到正常状态。这些%并不是基于表单本身实际增加的%(控件有时会根据表单大小变得太大) 关于最大化,如下所示: 控制比例(3,2.5) 但是,当你正常化时: 控制比例(-3,-2.5) 结果是0,0。有更好的方法吗?我用头敲击键盘已经有一段时间了 完整代码如下: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
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。。。分别。哇,我真不敢相信我没听懂。。。我欠你谢谢!