请问各位高手,控件如何能随窗体的大小来调整大小,谢谢!

解决方案 »

  1.   

    方法就是在 Form_Resize 事件中根据新的窗体大小重新计算每一个控件的 Left, Width, Top, Height 并赋值。必要时还要重新计算控件字体的大小。很麻烦的,尤其是调试。不仅要在 CRT 显示器上调,还要在液晶显示器上调,否则会有问题。最省事的就是把窗体设置成 SingleFixed, 不允许更改大小。
      

  2.   

    control.width...
    比如说mshflexgrid控件
    mshflexgrid.width=screen.width*.90
      

  3.   

    Private Sub Form_Resize()
    On Error Resume Next
      '当窗体调整时会调整网格
      
      DataGrid1.Width = Me.ScaleWidth - 200
      DataGrid1.Height = Me.ScaleHeight - 1100
      Command1.Left = Me.ScaleWidth - Command1.Width - 100
      Command1.Top = Me.ScaleHeight - 400
    End Sub
      

  4.   

    http://www.programfan.com/club/showtxt.asp?id=124116
    看看这个 是否有帮助
      

  5.   

    下面这组代可以实现你的要求,窗体内拖一个frame:
    Private Sub Form_Load()
      Form1.Height = Screen.Height / 6
      Form1.Width = Screen.Width / 6
    End Sub
    Private Sub Form_Resize()
      Frame1.Move 0, 0, ScaleWidth, ScaleHeight
    End Sub
      

  6.   

    我有一个resize控件,无需代码,只要放到窗体上即可,可任意缩放窗体.用了好久了,忘记是从哪找到的了.
      

  7.   

    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 DoubleScaleX = 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 SubPrivate Sub Form_Load()
    Call ResizeInit(Me)    '在程序装入时必须加入
    End SubPrivate Sub Form_Resize()
    Call ResizeForm(Me)
      '确保窗体改变时控件随之改变
    End Sub
      

  8.   

    Private Sub Form_Load()
        Dim obj As Object
        For Each obj In Me.Controls
            obj.Tag = obj.Left & "," & obj.Top & "," & obj.Width & "," & obj.Height
        Next obj
        Me.Tag = Me.Width & "," & Me.Height
    End SubPrivate Sub Form_Resize()
        Dim ScaleX As Double
        Dim ScaleY As Double
        Dim splitStr() As String
        Dim obj As Object
        
        splitStr = Split(Me.Tag, ",")
        ScaleX = Me.Width / splitStr(0)
        ScaleY = Me.Height / splitStr(1)
        
        For Each obj In Me.Controls
            splitStr = Split(obj.Tag, ",")
            obj.Left = splitStr(0) * ScaleX
            obj.Top = splitStr(1) * ScaleY
            obj.Width = splitStr(2) * ScaleX
            obj.Height = splitStr(3) * ScaleY
        Next obj
        
    End Sub
      

  9.   

    to ==>> ceagle(do my best!) 
    good!!  good !!
    以前找这个方法没有找到
    谢谢le
    up!!!