在窗口上放了一个TreeView(窗口左边)和ListView(窗口右边),界面类似于explorer,但不知怎么实现用鼠标拖拉俩控件之间的“缝隙”(在其它的编程语言有专门的控件可以实现这个功能)

解决方案 »

  1.   

    'Splitter是一个PictureBox
    Private Const SPLT_WDTH As Integer = 3
    Private currSplitPosX As Long
    Dim CTRL_OFFSET As Integer
    Dim SPLT_COLOUR As Long
    Private Sub Form_Load()
    CTRL_OFFSET = 10
    SPLT_COLOUR = &H808080
    currSplitPosX = &H7FFFFFFF
    End SubPrivate 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 = ListLeft.Width
    x2 = x1 + ListLeft.Width + SPLT_WDTH - 1
    width2 = ScaleWidth - x2 - CTRL_OFFSET
    ListLeft.Move x1% - 1, CTRL_OFFSET, width1, height1
    TextRight.Move x2, CTRL_OFFSET, width2 + 1, height1
    Splitter.Move x1 + ListLeft.Width - 1, CTRL_OFFSET, SPLT_WDTH, height1
    End SubPrivate 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 SubPrivate 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 SubPrivate 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 = &H8000000F
    If Splitter.Left > 60 And Splitter.Left < (ScaleWidth - 60) Then
    ListLeft.Width = Splitter.Left - ListLeft.Left 'the pane is within range
    ElseIf Splitter.Left < 60 Then 'the pane is too small
        ListLeft.Width = 60
    Else
        ListLeft.Width = ScaleWidth - 60 'the pane is too wide
    End If
        Form_Resize
    End If
    End Sub
      

  2.   

    THANKS FOR YOUR HELP, I KNOW HOW TO USE IT NOW