Dim FormoldWidth As Single
Dim FormoldHeight As Single
'加了以上两句
Private Sub Form_Load()
Call ResizeInit(Me)
End SubPrivate Sub Form_Resize()
Call ResizeForm(Me)
End SubPublic 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
调试-通过
窗体有
line,combo,command,label
Dim FormoldHeight As Single
'加了以上两句
Private Sub Form_Load()
Call ResizeInit(Me)
End SubPrivate Sub Form_Resize()
Call ResizeForm(Me)
End SubPublic 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
调试-通过
窗体有
line,combo,command,label
dbcontrols(泰山__抛砖引玉) ,我觉得www.dlvb.com不怎么样,不要做广告了!!
1。在 工具-选项-通用-错误捕获中,未选择遇到未处理的错误时中断,导致On Error Resume Next没有起作用。2。此时如果没有对line、Combo等控件做单独处理的话,缩放窗口时,这些控件不会跟着移动,会造成界面显示混乱。在这种情况下,请将这些控件放到容器控件里就可以一起移动了,不过不能缩放,若想自己做处理可以判断一下代码当前处理的是什么控件,用typeof,然后做特殊处理。
比如:
for each Obj in me.controls
if typeof Obj is combobox then end if再次感谢 gump2000(阿甘)的帮助!
而且效果还好些