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

来源:互联网 发布:淘宝网服饰女毛衣 编辑:程序博客网 时间:2024/05/28 01:34

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

  在模块中声明公用函数:

<span style="font-size:18px;"><span style="font-size:18px;">Option ExplicitPrivate 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 0End 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 0End Sub</span></span>

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

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

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



  

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

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


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

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


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


0 0
原创粉丝点击