新建一个模块: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作为参数,不知问题是不是出在这个上面?
到底是哪儿有问题???还请各位大虾多多帮忙,先谢谢各位了!(在线等)
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作为参数,不知问题是不是出在这个上面?
到底是哪儿有问题???还请各位大虾多多帮忙,先谢谢各位了!(在线等)
如果是From1那就错了。