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

解决方案 »

  1.   

    http://www.d1vb.com上万个VB朋友都注册了,50000条记录就是人气的象征!几千个代码和文章是你急需的。我是版主和站长,欢迎您的光顾!我们会尽最大努力帮助你。
      

  2.   

    gump2000(阿甘) ,vivan19781111(vivan kaizi) 不会吧,真的通过????我这里怎么不行???太奇怪了!!!!
     dbcontrols(泰山__抛砖引玉) ,我觉得www.dlvb.com不怎么样,不要做广告了!!
      

  3.   

    gump2000(阿甘) 是个热心人,在其帮助下,终于知道如何解决了!
    1。在 工具-选项-通用-错误捕获中,未选择遇到未处理的错误时中断,导致On Error Resume Next没有起作用。2。此时如果没有对line、Combo等控件做单独处理的话,缩放窗口时,这些控件不会跟着移动,会造成界面显示混乱。在这种情况下,请将这些控件放到容器控件里就可以一起移动了,不过不能缩放,若想自己做处理可以判断一下代码当前处理的是什么控件,用typeof,然后做特殊处理。
    比如:
    for each Obj in me.controls
      if typeof Obj is combobox then  end if再次感谢 gump2000(阿甘)的帮助!
      

  4.   

    自己在Resize事件中处理不就得了
    而且效果还好些