我在窗体创建了按钮,可是当我拖动这个窗体放大或者缩小,最大化的时候,那个按钮还是在原来的座标点不动,本来好好再一边的按钮就一下子跑到窗体中间来了。怎么才能让这个按钮跟随着窗体的大小来自动移动呢?谢谢大家

解决方案 »

  1.   

    SizeView (True)
    这样的话,我最大化的时候所有的空间都不动了,我是想让都可以自动适应
      

  2.   

    要实现控件的大小与窗体大小按比例变化,通常在窗体的RESIZE事件中编写代码。这种方法虽可行,但相当的繁索,控件小还好,多的话就不好办了。
    到网上找一些第三方控件,专门用来做这些事情的。据说ComponentOne不错。
      

  3.   

    可以把你的那些控件集中起来,放到Frame里面。根据窗体的布局分成两大块或三大块,Resize的时候就控件这两三个Frame就行了。这样控制起来就很简单了
      

  4.   

    把以下代碼放到窗體中,然后可以在窗體隨便添加控件。別謝我,我也是抄來的。Option Explicit
    Private ObjOldWidth As Long '保存表單的原始寬度
    Private ObjOldHeight As Long '保存表單的原始高度
    Private ObjOldFont As Single '保存表單的原始字體比'在調用ResizeForm前先調用本函數
    Public Sub ResizeInit(FormName As Form)
        Dim Obj As Control
        
        ObjOldWidth = FormName.ScaleWidth
        ObjOldHeight = FormName.ScaleHeight
        ObjOldFont = FormName.Font.Size / ObjOldHeight
        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 / ObjOldWidth
        '保存表單寬度縮放比例
        ScaleY = FormName.ScaleHeight / ObjOldHeight
        '保存表單高度縮放比例
        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
                Obj.Font.Size = ObjOldFont * FormName.ScaleHeight
            Next i
            
        Next Obj
        
        On Error GoTo 0
    End SubPrivate Sub Form_Resize()
        '確保表單改變時控制項隨之改變
        Call ResizeForm(Me)
    End SubPrivate Sub Form_Load()
        '在程式裝入時必須加入
        Call ResizeInit(Me)
    End Sub