你看这个行不行,行的话就赏点分啊,好几天没有得分了,心里不太舒服啊
两个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 = &H8000000F
If 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
把below code saveto .frm file
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 '窗口缺省
Begin VB.TextBox Text2
Height = 495
Left = 1920
TabIndex = 1
Text = "Text2"
Top = 600
Width = 1455
End
Begin VB.TextBox Text1
Height = 495
Left = 120
TabIndex = 0
Text = "Text1"
Top = 600
Width = 1695
End
Begin VB.Label Label1
BackColor = &H00FF8080&
Caption = "Label1"
Height = 495
Left = 1800
TabIndex = 2
Top = 600
Width = 100
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim oldx As Integer
Sub setlabelpos(l As Integer, r As Integer)
If Label1.Left < Me.Text1.Left + 1500 Then
Label1.Left = Me.Text1.Left + l
Else
Label1.Left = Me.Text2.Left + Me.Text2.Width - r
End If
End Sub
Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
oldx = X
setlabelpos 200, 300
End Sub
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim i
If Button = 1 Then
Label1.Move X - oldx + Label1.Left
If (Label1.Left >= Me.Text1.Left + 200 And Label1.Left <=
Me.Text2.Left + Me.Text2.Width - 300) Then
i = Me.Text1.Width
Me.Text1.Width = Label1.Left - Me.Text1.Left
Me.Text2.Width = Me.Text2.Width + (i - Me.Text1.Width)
Me.Text2.Left = Label1.Left + 100
Else
setlabelpos 189, 280
End If
End If
End Sub
Private Sub Label1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Label1.Left = Me.Text2.Left - 100
End Sub