程序运行后,使用鼠标可以调整控件的大小和位置,例如,两个相伶的文本框,中间加一条线,鼠标拖动这条线的时候,左右两个文本框相应大小变化。请问如何实现???

解决方案 »

  1.   

    你看这个行不行,行的话就赏点分啊,好几天没有得分了,心里不太舒服啊
    两个textbox,一个picturebox(name属性为splitter,mousepointer为9)
    Option Explicit
    Private Const SPLT_WDTH As Integer = 35
    Private currSplitPosX As Long
    Dim CTRL_OFFSET As Integer
    Dim SPLT_COLOUR As Long
    Private Sub Form_Load()
    CTRL_OFFSET = 5
    SPLT_COLOUR = &H808080
    currSplitPosX = &H7FFFFFFF
    Textright = "经常见到窗体上有二个相邻的列表框,可以用鼠标任意拉动中间分割条,改变列表框大小。"
    End Sub
    Private Sub Form_Resize()
    Dim x1 As Integer
    Dim x2 As Integer
    Dim height1 As Integer
    Dim width1 As Integer
    Dim width2 As Integer
    On Error Resume Next
    height1 = ScaleHeight - (CTRL_OFFSET * 2)
    x1 = CTRL_OFFSET
    width1 = Textleft.Width
    x2 = x1 + Textleft.Width + SPLT_WDTH - 1
    width2 = ScaleWidth - x2 - CTRL_OFFSET
    Textleft.Move x1% - 1, CTRL_OFFSET, width1, height1
    Textright.Move x2, CTRL_OFFSET, width2 + 1, height1
    splitter.Move x1 + Textleft.Width - 1, CTRL_OFFSET, SPLT_WDTH, height1
    End Sub
    Private Sub Splitter_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    if Button = vbLeftButton Then
       splitter.BackColor = SPLT_COLOUR
       currSplitPosX = CLng(X)
    Else
       If currSplitPosX <> &H7FFFFFFF Then Splitter_MouseUp Button, Shift, X, Y
        currSplitPosX = &H7FFFFFFF
    End If
    End Sub
    Private Sub Splitter_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If currSplitPosX& <> &H7FFFFFFF Then
    If CLng(X) <> currSplitPosX Then
    splitter.Move splitter.Left + X, CTRL_OFFSET, SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2)
    currSplitPosX = CLng(X)
    End If
    End If
    End Sub
    Private Sub Splitter_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If currSplitPosX <> &H7FFFFFFF Then
    If CLng(X) <> currSplitPosX Then
        splitter.Move splitter.Left + X, CTRL_OFFSET, SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2)
    End If
    currSplitPosX = &H7FFFFFFF
    splitter.BackColor = &H8000000FIf splitter.Left > 60 And splitter.Left < (ScaleWidth - 60) Then
    Textleft.Width = splitter.Left - Textleft.Left
    ElseIf splitter.Left < 60 Then
        Textleft.Width = 60
    Else
        Textleft.Width = ScaleWidth - 60
    End If
       Form_Resize
    End If
    End Sub
      

  2.   

    http://community.csdn.net/Expert/topic/3384/3384537.xml?temp=.4304926
    ftp://ftp.softcircuits.com/vbsrc/formdsgn.zip