Private Sub TreeView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) If TreeView1.HitTest(x, y) Is Nothing Then Else TreeView1.HitTest(x, y).Selected = True End If End Sub
'一个很好的实例 Option ExplicitPrivate Enum ObjectType otNone = 0 otFactory = 1 otGroup = 2 otPerson = 3 otFactory2 = 4 otGroup2 = 5 otPerson2 = 6 End EnumPrivate SourceNode As Object Private SourceType As ObjectType Private TargetNode As Object' 返回节点类型 Private Function NodeType(test_node As Node) As ObjectType If test_node Is Nothing Then Exit Function Select Case Left$(test_node.Key, 1) Case "f" NodeType = otFactory Case "g" NodeType = otGroup Case "p" NodeType = otPerson End Select End Function' 设置ImageList和TreeView Private Sub Form_Load() Dim i As Integer Dim factory As Node Dim group As Node Dim person As Node ' 将图片加入ImageList. For i = 1 To 6 TreeImages.ListImages.Add , , TreeImage(i).Picture Next i
' 创建节点 Set factory = OrgTree.Nodes.Add(, , "f R & D", "R & D", otFactory, otFactory2) Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Engineering", "Engineering", otGroup, otGroup2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Cameron, Charlie", "Cameron, Charlie", otPerson, otPerson2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Davos, Debbie", "Davos, Debbie", otPerson, otPerson2) person.EnsureVisible Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Test", "Test", otGroup, otGroup2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Able, Andy", "Andy, Able", otPerson, otPerson2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Baker, Betty", "Baker, Betty", otPerson, otPerson2) person.EnsureVisible
Set factory = OrgTree.Nodes.Add(, , "f Sales & Support", "Sales & Support", otFactory, otFactory2) Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Showroom Sales", "Showroom Sales", otGroup, otGroup2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Gaines, Gina", "Gaines, Gina", otPerson, otPerson2) person.EnsureVisible Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Field Service", "Field Service", otGroup, otGroup2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Helms, Harry", "Helms, Harry", otPerson, otPerson2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Ives, Irma", "Ives, Irma", otPerson, otPerson2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Jackson, Josh", "Jackson, Josh", otPerson, otPerson2) person.EnsureVisible Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Customer Support", "Customer Support", otGroup, otGroup2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Klug, Karl", "Klug, Karl", otPerson, otPerson2) Set person = OrgTree.Nodes.Add(group, tvwChild, "p Landau, Linda", "Landau, Linda", otPerson, otPerson2) person.EnsureVisible End Sub' 调节TreeView大小 Private Sub Form_Resize() OrgTree.Move 0, 0, ScaleWidth, ScaleHeight End Sub' 保存节点信息以便拖动 Private Sub OrgTree_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Set SourceNode = OrgTree.HitTest(x, y) End Sub' 拖动节点 Private Sub OrgTree_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) If SourceNode Is Nothing Then Exit Sub If Button = vbLeftButton Then
' 选择节点并设置拖动图标 SourceType = NodeType(SourceNode) Set OrgTree.SelectedItem = SourceNode
OrgTree.DragIcon = IconImage(SourceType) OrgTree.Drag vbBeginDrag End If End Sub' 检验拖动是否有效 Private Sub OrgTree_DragDrop(Source As Control, x As Single, y As Single) If SourceNode Is Nothing Then Exit Sub If Not (OrgTree.DropHighlight Is Nothing) Then ' 设置源节点和目标节点 Set SourceNode.Parent = OrgTree.DropHighlight Set OrgTree.DropHighlight = Nothing End If Set SourceNode = Nothing SourceType = otNone End Sub' 设置拖动的显示效果 Private Sub OrgTree_DragOver(Source As Control, x As Single, y As Single, State As Integer) Dim target As Node Dim highlight As Boolean If SourceNode Is Nothing Then Exit Sub
Set target = OrgTree.HitTest(x, y)
If target Is TargetNode Then Exit Sub Set TargetNode = target
highlight = False If Not (TargetNode Is Nothing) Then If NodeType(TargetNode) + 1 = SourceType Then _ highlight = True End If
If highlight Then Set OrgTree.DropHighlight = TargetNode Else Set OrgTree.DropHighlight = Nothing End If End Sub
If TreeView1.HitTest(x, y) Is Nothing Then
Else
TreeView1.HitTest(x, y).Selected = True
End If
End Sub
Option ExplicitPrivate Enum ObjectType
otNone = 0
otFactory = 1
otGroup = 2
otPerson = 3
otFactory2 = 4
otGroup2 = 5
otPerson2 = 6
End EnumPrivate SourceNode As Object
Private SourceType As ObjectType
Private TargetNode As Object' 返回节点类型
Private Function NodeType(test_node As Node) As ObjectType
If test_node Is Nothing Then Exit Function
Select Case Left$(test_node.Key, 1)
Case "f"
NodeType = otFactory
Case "g"
NodeType = otGroup
Case "p"
NodeType = otPerson
End Select
End Function' 设置ImageList和TreeView
Private Sub Form_Load()
Dim i As Integer
Dim factory As Node
Dim group As Node
Dim person As Node ' 将图片加入ImageList.
For i = 1 To 6
TreeImages.ListImages.Add , , TreeImage(i).Picture
Next i
' 将ImageList在TreeView中显示.
OrgTree.ImageList = TreeImages
' 创建节点
Set factory = OrgTree.Nodes.Add(, , "f R & D", "R & D", otFactory, otFactory2)
Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Engineering", "Engineering", otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Cameron, Charlie", "Cameron, Charlie", otPerson, otPerson2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Davos, Debbie", "Davos, Debbie", otPerson, otPerson2)
person.EnsureVisible
Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Test", "Test", otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Able, Andy", "Andy, Able", otPerson, otPerson2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Baker, Betty", "Baker, Betty", otPerson, otPerson2)
person.EnsureVisible
Set factory = OrgTree.Nodes.Add(, , "f Sales & Support", "Sales & Support", otFactory, otFactory2)
Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Showroom Sales", "Showroom Sales", otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Gaines, Gina", "Gaines, Gina", otPerson, otPerson2)
person.EnsureVisible
Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Field Service", "Field Service", otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Helms, Harry", "Helms, Harry", otPerson, otPerson2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Ives, Irma", "Ives, Irma", otPerson, otPerson2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Jackson, Josh", "Jackson, Josh", otPerson, otPerson2)
person.EnsureVisible
Set group = OrgTree.Nodes.Add(factory, tvwChild, "g Customer Support", "Customer Support", otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Klug, Karl", "Klug, Karl", otPerson, otPerson2)
Set person = OrgTree.Nodes.Add(group, tvwChild, "p Landau, Linda", "Landau, Linda", otPerson, otPerson2)
person.EnsureVisible
End Sub' 调节TreeView大小
Private Sub Form_Resize()
OrgTree.Move 0, 0, ScaleWidth, ScaleHeight
End Sub' 保存节点信息以便拖动
Private Sub OrgTree_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Set SourceNode = OrgTree.HitTest(x, y)
End Sub' 拖动节点
Private Sub OrgTree_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If SourceNode Is Nothing Then Exit Sub If Button = vbLeftButton Then
' 选择节点并设置拖动图标
SourceType = NodeType(SourceNode)
Set OrgTree.SelectedItem = SourceNode
OrgTree.DragIcon = IconImage(SourceType)
OrgTree.Drag vbBeginDrag
End If
End Sub' 检验拖动是否有效
Private Sub OrgTree_DragDrop(Source As Control, x As Single, y As Single)
If SourceNode Is Nothing Then Exit Sub If Not (OrgTree.DropHighlight Is Nothing) Then
' 设置源节点和目标节点
Set SourceNode.Parent = OrgTree.DropHighlight
Set OrgTree.DropHighlight = Nothing
End If Set SourceNode = Nothing
SourceType = otNone
End Sub' 设置拖动的显示效果
Private Sub OrgTree_DragOver(Source As Control, x As Single, y As Single, State As Integer)
Dim target As Node
Dim highlight As Boolean If SourceNode Is Nothing Then Exit Sub
Set target = OrgTree.HitTest(x, y)
If target Is TargetNode Then Exit Sub
Set TargetNode = target
highlight = False
If Not (TargetNode Is Nothing) Then
If NodeType(TargetNode) + 1 = SourceType Then _
highlight = True
End If
If highlight Then
Set OrgTree.DropHighlight = TargetNode
Else
Set OrgTree.DropHighlight = Nothing
End If
End Sub