新建一个模块:Module1Option ExplicitPrivate FormOriginalWidth As Long '保存窗体的原始宽度
Private FormOriginalHeight As Long '保存窗体的原始高度
Private Meobjectscounts As Integer '记录当前窗体中的控件数量Public Sub ResizeInit(FormName As Form)    Dim MeObjects As Control
        
    Meobjectscounts = 0
    FormOriginalWidth = FormName.ScaleWidth
    FormOriginalHeight = FormName.ScaleHeight
    
    On Error Resume Next
    
    '记录每个控件的位置大小参数
    For Each MeObjects In FormName
        MeObjects.Tag = MeObjects.Left & " " & MeObjects.Top & " " & MeObjects.Width & " " & MeObjects.Height & " "
        Meobjectscounts = Meobjectscounts + 1
    Next MeObjects
   
    On Error GoTo 0
    
End SubPublic Sub ResizeForm(FormName As Form)
    Dim pos(4) As Double'因为有top,left,width,height4个属性
    Dim i As Long, TempPos As Long, StartPos As Long
    Dim X As Double, Y As Double
    Dim MeObjects As Control
    
    X = FormName.ScaleWidth / FormOriginalWidth '保存窗体宽度的缩放比例
    Y = FormName.ScaleHeight / FormOriginalHeight '保存窗体高度的缩放比例
    
    On Error Resume Next
    
    '获取每个控件的位置大小参数值
    For Each MeObjects In FormName
        StartPos = 1
        For i = 0 To 3
            TempPos = InStr(StartPos, MeObjects.Tag, " ", vbTextCompare)
            If TempPos > 0 Then
               pos(i) = Mid(MeObjects.Tag, StartPos, TempPos - StartPos)
               StartPos = TempPos + 1
            Else
               pos(i) = 0
            End If
            
            '根据控件原始位置及窗体大小的比例对控件重新定位与改变大小
            MeObjects.Move pos(0) * X, pos(1) * Y, pos(2) * X, pos(3) * Y
                        
        Next i   Next MeObjects
   On Error GoTo 0
End Sub新建一窗体(一个TreeView1控件,一个ListView1控件,一个Frame1控件,两个命今按钮在frame控件内):
Option ExplicitPrivate Sub Form_Load()
   With TreeView1
       .Left = 20
       .Top = 100
       .Height = Me.ScaleHeight - (.Top + Frame1.Height + 300)
        ListView1.Left = .Width + 50
        ListView1.Top = .Top
        ListView1.Height = .Height
        ListView1.Width = Me.ScaleWidth - ListView1.Left - 30
        Frame1.Top = .Height + 300
        Frame1.Left = .Left + 500
        Frame1.Width = Me.ScaleWidth - Frame1.Left - 500
   End With
   Call ResizeInit(Me)
End SubPrivate Sub Form_Resize()
   Call ResizeForm(Me)
End Sub以上的程序功能实现的是窗体内的控件随窗体的改变而改变,当窗体作为单独窗体使用时正常,不过将这个窗体作为MDI窗体的子窗体使用时,窗体内的控件随窗体的改变而改变的功能就无法实现了。经过调试发现问题好像出现在调用时传递参数的问题上。当一个窗体单独使用时,用参数me代表本身情况正常,当将窗体作为一个MDI窗体的子窗体时我还是用Me作为参数,不知问题是不是出在这个上面?
到底是哪儿有问题???还请各位大虾多多帮忙,先谢谢各位了!(在线等)