Option   Explicit     
    
  Private   FormOldWidth   As   Long   '保存窗体的原始宽度     
  Private   FormOldHeight   As   Long   '保存窗体的原始高度     
    
    
  '在调用ResizeForm前先调用本函数     
  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   0     
    
  End   Sub     
    
  '按比例改变表单内各元件的大小,   在调用ReSizeForm前先调用ReSizeInit函数     
    
  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     
    
  Private   Sub   Form_Load()     
    
  Call   ResizeInit(Me)   '在程序装入时必须加入     
    
  End   Sub     
    
  Private   Sub   Form_Resize()     
    
  Call   ResizeForm(Me)   '确保窗体改变时控件随之改变     
    
  End   Sub
使用了这段代码(在本社区找的)在自由改变窗体大小时,窗体中的控件也随着变化,可是,只有comboBox的大小不变,怎么办?

解决方案 »

  1.   

    comboBox控件不能改变大小,只能改变位置,
      

  2.   

    Combobox不能改变高度,其高度是根据其Font.size的大小来自动适应的。
      

  3.   

    可是,comboBox的位置也没有跟着变
      

  4.   

    因为Height为只读属性
    你给comboBox赋高度值出错你加了On   Error   Resume   Next     
    所有看不出来 改成类型只要是comboBox的就只Move x,y 即可
      

  5.   

    comboBox的大小只根据字体的大小改变
      

  6.   

    就上面的代码,怎么改?请指教.当然在comboBox可以随窗体改变的同时,其它控件也是要同时改变的.
      

  7.   

    给你个代码:我试过了,可以的,
    Option Explicit
    Dim ZiShiYing_T(), ZiShiYing_L(), ZiShiYing_H(), ZiShiYing_W(), ZiShiYing_N%Private Sub Form_Load()
    Dim mcontrol As Object
    On Error Resume Next
    ZiShiYing_N = 0
    For Each mcontrol In Me.Controls
        If Not (TypeOf mcontrol Is Menu) Then
            ZiShiYing_N = ZiShiYing_N + 1
            ReDim Preserve ZiShiYing_T(ZiShiYing_N)
            ReDim Preserve ZiShiYing_L(ZiShiYing_N)
            ReDim Preserve ZiShiYing_H(ZiShiYing_N)
            ReDim Preserve ZiShiYing_W(ZiShiYing_N)
            ZiShiYing_T(ZiShiYing_N) = mcontrol.Top / ScaleHeight
            ZiShiYing_L(ZiShiYing_N) = mcontrol.Left / ScaleWidth
            ZiShiYing_H(ZiShiYing_N) = mcontrol.Height / ScaleHeight
            ZiShiYing_W(ZiShiYing_N) = mcontrol.Width / ScaleWidth
        End If
    Next
    On Error GoTo 0
    End Sub
    Private Sub Form_Resize()
    Dim mcontrol As Object
    On Error Resume Next
    ZiShiYing_N = 0
    For Each mcontrol In Me.Controls
        If Not (TypeOf mcontrol Is Menu) Then
            ZiShiYing_N = ZiShiYing_N + 1
            mcontrol.Top = ZiShiYing_T(ZiShiYing_N) * ScaleHeight
            mcontrol.Left = ZiShiYing_L(ZiShiYing_N) * ScaleWidth
            mcontrol.Height = ZiShiYing_H(ZiShiYing_N) * ScaleHeight
            mcontrol.Width = ZiShiYing_W(ZiShiYing_N) * ScaleWidth
        End If
    Next
    On Error GoTo 0
    End Sub