你看这个行不行,行的话就赏点分啊,好几天没有得分了,心里不太舒服啊 两个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
两个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
ftp://ftp.softcircuits.com/vbsrc/formdsgn.zip