机房收费系统优化之控件随窗体改变而相应比例改变

  在敲学生信息管理系统的时候,就想到了窗体最大化后,控件随窗体改变而相应比例改变的优化问题,但是没去实现,后在优化机房的时候,将以前积累的代码重新拿出来试了试:

  在模块中声明公用函数:

<span style="font-size:18px;"><span style="font-size:18px;">Option Explicit
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度
 
Public Sub ResizeInit(FormName As Form)
    Dim Obj As Control
    FormOldWidth = FormName.ScaleWidth
    FormOldHeight = FormName.ScaleHeight
    On Error Resume Next
    For Each Obj In FormName
        Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
    Next Obj
    On Error GoTo 0
End Sub
 
Public Sub ResizeForm(FormName As Form)
    Dim Pos(4) As Double
    Dim i      As Long, TempPos As Long, StartPos As Long
    Dim Obj    As Control
    Dim ScaleX As Double, ScaleY As Double
 
    ScaleX = FormName.ScaleWidth / FormOldWidth
    ScaleY = FormName.ScaleHeight / FormOldHeight
    On Error Resume Next
    For Each Obj In FormName
        StartPos = 1
        For i = 0 To 4
            TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
            If TempPos > 0 Then
                Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
                StartPos = TempPos + 1
            Else
                Pos(i) = 0
            End If
 
            Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
        Next i
    Next Obj
    On Error GoTo 0
End Sub</span></span>

  然后在相应的窗体中调用:

<span style="font-size:18px;"><span style="font-size:18px;">Private Sub Form_Resize()
    Call ResizeForm(Me) '确保窗体改变时控件随之改变
End Sub
Private Sub Form_Load()
    Call ResizeInit(Me) '在程序装入时加入
end sub</span></span>

  令人觉得奇怪的是:新建的工程里就能完美的实现,但是放到机房收费系统就会报错:

机房收费系统优化之控件随窗体改变而相应比例改变_第1张图片

机房收费系统优化之控件随窗体改变而相应比例改变_第2张图片

机房收费系统优化之控件随窗体改变而相应比例改变_第3张图片
  

  后想起也许是因为机房收费系统中MDI窗体使用了PictureBox控件,导致需要用到SetParent函数才能显示子窗体的缘故,如果不在Form的Load事件中给窗体设定大小(Me.Height =自定义高度值;Me.Width = 自定义宽度值),运行的时候子窗体只有“头”会漏一点,除非设置BorderStyle属性为1来固定窗体大小,但是属性设置了,就没有最大化和最小化功能了。

  由于这个功能在优化子窗体的时候没有太多必要,所以那时我就放弃了,直接将属性设为1。如今机房优化已经完成,回过头来新建了一个工程用来实验,实验成功!发现不是因为自己在窗体中限制了自定义宽度和高度的原因,也不是因为将其(Me.Height =自定义高度值;Me.Width = 自定义宽度值)写在了Form_Load事件中Call ResizeInit(Me) 这句代码前后的原因——这是我曾一度以为的错误原因。

机房收费系统优化之控件随窗体改变而相应比例改变_第4张图片

  可是用机房收费系统来试验代码依旧会报错,哪怕属性设置都没有错(如下)

机房收费系统优化之控件随窗体改变而相应比例改变_第5张图片

  以下代码是写在模块里边的:

机房收费系统优化之控件随窗体改变而相应比例改变_第6张图片

  我很是不解,为什么新建工程就不会出现这样的问题呢?所以,此博文的目的并不在于分享经验,而是请求指点~~~


你可能感兴趣的:(优化,vb,机房收费系统)