'給你一個例子參考一下: '========================================================'******TreeView的使用,及选中其中指定的节点'========================================================Private Sub Command1_Click() Dim nodeY As Node For Each nodeY In TreeView1.Nodes If CStr(Trim(nodeY.Text)) = "ff" Then nodeY.Selected = True TreeView1.SetFocus Exit For End If Next End SubPrivate Sub Form_Load() Rs1.CommandType = adCmdText Rs1.RecordSource = "select distinct biao,zu from test order by zu" Rs1.Refresh Dim Rs As ADODB.Recordset Set Rs = Rs1.Recordset Set nodX = TreeView1.Nodes.Add(, , "r", "报表组 ") i = 0 Dim TempString As String Dim TempKey As Long Do Until Rs.EOF Or Rs.BOF If TempString = Rs!zu Then Set nodeX = TreeView1.Nodes.Add("Z" & TempKey, tvwChild, "B" & i, Rs!biao) Else Set nodX = TreeView1.Nodes.Add("r", tvwChild, "Z" & i, Rs!zu) Set nodeX = TreeView1.Nodes.Add("Z" & i, tvwChild, "B" & i, Rs!biao) TempString = Rs!zu TempKey = i End If Rs.MoveNext i = i + 1 Loop End Sub
树状浏览器添加节点的例子: Option Explicit Private Sub Form_Load() Dim nodF As Node Dim intI As Integer Set nodF = TreeView1.Nodes.Add(, , "L0", "家庭") Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L1", "李国", 1, 2) Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L2", "李富", 1, 2) Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L3", "李民", 1, 2) Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L4", "李强", 1, 2) nodF.EnsureVisible '自节点“李强”起向前展开 Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL1", "李太", 1, 2) Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL2", "李平", 1, 2) Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL3", "李盛", 1, 2) Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL4", "李世", 1, 2) Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL1", "李百", 1, 2) Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL2", "李花", 1, 2) Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL3", "李争", 1, 2) Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL4", "李艳", 1, 2) Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL1", "李皆", 1, 2) Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL2", "李大", 1, 2) Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL3", "李欢", 1, 2) Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL4", "李喜", 1, 2) '为节点集合配展开后的图形 For intI = 1 To TreeView1.Nodes.Count TreeView1.Nodes(intI).ExpandedImage = 3 Next End Sub
树状浏览器拖放的例子: Option Explicit'复制或移动一个节点的所有子节点的递归过程 Sub treCopySub(treSource As TreeView, nodSource As Node, _ treDest As TreeView, nodDest As Node) Dim intI As Integer Dim nodS As Node '源节点 Dim nodD As Node '目标节点 If nodSource.Children = 0 Then Exit Sub
Set nodS = nodSource.Child For intI = 1 To nodSource.Children '在目标树状浏览器增加一个节点 Set nodD = treDest.Nodes.Add(nodDest, tvwChild, , _ nodS.Text, nodS.Image, nodS.SelectedImage) nodD.ExpandedImage = nodS.ExpandedImage '以递归的方式加该节点的所有子节点 treCopySub treSource, nodS, treDest, nodD '引用下一个相邻的同层节点 Set nodS = nodS.Next Next intI End Sub'递归删除节点的子树 Sub treDeleSub(treA As TreeView, nodA As Node) Dim intI As Integer, nodB As Node, nodC As Node '首先删除子节点 Set nodB = nodA.Child For intI = 1 To nodA.Children '在删除一个节点之前,引用该节点的同层的下一个相邻节点 Set nodC = nodB.Next treDeleSub treA, nodB Set nodB = nodC Next intI '删除该节点 treA.Nodes.Remove nodA.Index End SubOption Explicit Dim treSource As TreeView '源树状浏览器 Dim nodSource As Node '源节点 Dim keyState As Integer 'Shift键的状态Private Sub Form_Load() Dim nodF As Node Dim intI As Integer Set nodF = TreeView1(0).Nodes.Add(, , "L0", "家庭") Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L1", "李国", 1, 2) Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L2", "李富", 1, 2) Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L3", "李民", 1, 2) Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L4", "李强", 1, 2) nodF.EnsureVisible '自节点“李强”起向前展开 Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL1", "李太", 1, 2) Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL2", "李平", 1, 2) Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL3", "李盛", 1, 2) Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL4", "李世", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL1", "李百", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL2", "李花", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL3", "李争", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL4", "李艳", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL1", "李皆", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL2", "李大", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL3", "李欢", 1, 2) Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL4", "李喜", 1, 2) '为节点集合配展开后的图形 For intI = 1 To TreeView1(0).Nodes.Count TreeView1(0).Nodes(intI).ExpandedImage = 3 Next End Sub'按下鼠标右键进入拖动进程 'Index为0或1表示树状浏览器控件数组的元素 Private Sub TreeView1_MouseDown(Index As Integer, Button As Integer, _ Shift As Integer, x As Single, y As Single) '在拖放时必须使用鼠标右键 If Button <> 2 Then Exit Sub '根据当时鼠标所在的位置,确定被拖放的节点nodSource Set nodSource = TreeView1(Index).HitTest(x, y) If nodSource Is Nothing Then Exit Sub '保存当时鼠标所在的树状浏览器作为源treSource Set treSource = TreeView1(Index) keyState = Shift '取得Shift键状态 '进入拖放操作进程 TreeView1(Index).OLEDrag End Sub'OLEDrag方法引发OLEStartDrag事件 'Index为0或1表示树状浏览器控件数组的元素 Private Sub TreeView1_OLEStartDrag(Index As Integer, _ Data As MSComctlLib.DataObject, AllowedEffects As Long) ' pass the Key property of the Node being dragged '将nodSource.Key插入DataObject对象 Data.SetData nodSource.Key If keyState And vbCtrlMask Then '使用了Ctrl键,这时是复制操作 AllowedEffects = vbDropEffectCopy Else '没有使用Ctrl键,这时是移动操作 '删除拖放的源数据 AllowedEffects = vbDropEffectMove End If End Sub'当一个部件在另一个部件上拖动时引发 'Index为0或1表示树状浏览器控件数组的元素 Private Sub TreeView1_OLEDragOver(Index As Integer, _ Data As MSComctlLib.DataObject, Effect As Long, _ Button As Integer, Shift As Integer, x As Single, y As Single, _ State As Integer) '当鼠光标位于节点上时,节点高亮显示 Set TreeView1(Index).DropHighlight = TreeView1(Index).HitTest(x, y) End Sub'源部件放到目标部件时引发 'Index为0或1表示树状浏览器控件数组的元素 Private Sub TreeView1_OLEDragDrop(Index As Integer, _ Data As MSComctlLib.DataObject, Effect As Long, _ Button As Integer, Shift As Integer, x As Single, y As Single) Dim nodDest As Node, nodA As Node '拖放的目标节点 Set nodDest = TreeView1(Index).DropHighlight If nodDest Is Nothing Then '将该节点作为目标树状浏览器的根节点 Set nodA = TreeView1(Index).Nodes.Add(, , , nodSource.Text, _ nodSource.Image) Else '检查目标节点是不是与源节点等同 If treSource Is TreeView1(Index) Then Set nodA = nodDest Do If nodA Is nodSource Then '目标节点与源节点等同 MsgBox "不能拖放!", vbExclamation Exit Sub End If Set nodA = nodA.Parent Loop Until nodA Is Nothing End If Set nodA = TreeView1(Index).Nodes.Add(nodDest.Index, _ tvwChild, , nodSource.Text, nodSource.Image) End If nodA.ExpandedImage = 2 '展开图形 nodA.Expanded = True
treCopySub treSource, nodSource, TreeView1(Index), nodA ' if this is a move operation, delete the source subtree If Effect = vbDropEffectMove Then treDeleSub treSource, nodSource End If Set TreeView1(Index).DropHighlight = Nothing End Sub
'========================================================'******TreeView的使用,及选中其中指定的节点'========================================================Private Sub Command1_Click()
Dim nodeY As Node
For Each nodeY In TreeView1.Nodes
If CStr(Trim(nodeY.Text)) = "ff" Then
nodeY.Selected = True
TreeView1.SetFocus
Exit For
End If
Next
End SubPrivate Sub Form_Load()
Rs1.CommandType = adCmdText
Rs1.RecordSource = "select distinct biao,zu from test order by zu"
Rs1.Refresh
Dim Rs As ADODB.Recordset
Set Rs = Rs1.Recordset
Set nodX = TreeView1.Nodes.Add(, , "r", "报表组 ")
i = 0
Dim TempString As String
Dim TempKey As Long
Do Until Rs.EOF Or Rs.BOF
If TempString = Rs!zu Then
Set nodeX = TreeView1.Nodes.Add("Z" & TempKey, tvwChild, "B" & i, Rs!biao)
Else
Set nodX = TreeView1.Nodes.Add("r", tvwChild, "Z" & i, Rs!zu)
Set nodeX = TreeView1.Nodes.Add("Z" & i, tvwChild, "B" & i, Rs!biao)
TempString = Rs!zu
TempKey = i
End If
Rs.MoveNext
i = i + 1
Loop
End Sub
Option Explicit
Private Sub Form_Load()
Dim nodF As Node
Dim intI As Integer
Set nodF = TreeView1.Nodes.Add(, , "L0", "家庭")
Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L1", "李国", 1, 2)
Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L2", "李富", 1, 2)
Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L3", "李民", 1, 2)
Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L4", "李强", 1, 2)
nodF.EnsureVisible '自节点“李强”起向前展开
Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL1", "李太", 1, 2)
Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL2", "李平", 1, 2)
Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL3", "李盛", 1, 2)
Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL4", "李世", 1, 2)
Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL1", "李百", 1, 2)
Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL2", "李花", 1, 2)
Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL3", "李争", 1, 2)
Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL4", "李艳", 1, 2)
Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL1", "李皆", 1, 2)
Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL2", "李大", 1, 2)
Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL3", "李欢", 1, 2)
Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL4", "李喜", 1, 2)
'为节点集合配展开后的图形
For intI = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(intI).ExpandedImage = 3
Next
End Sub
Option Explicit'复制或移动一个节点的所有子节点的递归过程
Sub treCopySub(treSource As TreeView, nodSource As Node, _
treDest As TreeView, nodDest As Node)
Dim intI As Integer
Dim nodS As Node '源节点
Dim nodD As Node '目标节点
If nodSource.Children = 0 Then Exit Sub
Set nodS = nodSource.Child
For intI = 1 To nodSource.Children
'在目标树状浏览器增加一个节点
Set nodD = treDest.Nodes.Add(nodDest, tvwChild, , _
nodS.Text, nodS.Image, nodS.SelectedImage)
nodD.ExpandedImage = nodS.ExpandedImage
'以递归的方式加该节点的所有子节点
treCopySub treSource, nodS, treDest, nodD
'引用下一个相邻的同层节点
Set nodS = nodS.Next
Next intI
End Sub'递归删除节点的子树
Sub treDeleSub(treA As TreeView, nodA As Node)
Dim intI As Integer, nodB As Node, nodC As Node
'首先删除子节点
Set nodB = nodA.Child
For intI = 1 To nodA.Children
'在删除一个节点之前,引用该节点的同层的下一个相邻节点
Set nodC = nodB.Next
treDeleSub treA, nodB
Set nodB = nodC
Next intI
'删除该节点
treA.Nodes.Remove nodA.Index
End SubOption Explicit
Dim treSource As TreeView '源树状浏览器
Dim nodSource As Node '源节点
Dim keyState As Integer 'Shift键的状态Private Sub Form_Load()
Dim nodF As Node
Dim intI As Integer
Set nodF = TreeView1(0).Nodes.Add(, , "L0", "家庭")
Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L1", "李国", 1, 2)
Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L2", "李富", 1, 2)
Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L3", "李民", 1, 2)
Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L4", "李强", 1, 2)
nodF.EnsureVisible '自节点“李强”起向前展开
Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL1", "李太", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL2", "李平", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL3", "李盛", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL4", "李世", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL1", "李百", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL2", "李花", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL3", "李争", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL4", "李艳", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL1", "李皆", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL2", "李大", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL3", "李欢", 1, 2)
Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL4", "李喜", 1, 2)
'为节点集合配展开后的图形
For intI = 1 To TreeView1(0).Nodes.Count
TreeView1(0).Nodes(intI).ExpandedImage = 3
Next
End Sub'按下鼠标右键进入拖动进程
'Index为0或1表示树状浏览器控件数组的元素
Private Sub TreeView1_MouseDown(Index As Integer, Button As Integer, _
Shift As Integer, x As Single, y As Single)
'在拖放时必须使用鼠标右键
If Button <> 2 Then Exit Sub
'根据当时鼠标所在的位置,确定被拖放的节点nodSource
Set nodSource = TreeView1(Index).HitTest(x, y)
If nodSource Is Nothing Then Exit Sub
'保存当时鼠标所在的树状浏览器作为源treSource
Set treSource = TreeView1(Index)
keyState = Shift '取得Shift键状态
'进入拖放操作进程
TreeView1(Index).OLEDrag
End Sub'OLEDrag方法引发OLEStartDrag事件
'Index为0或1表示树状浏览器控件数组的元素
Private Sub TreeView1_OLEStartDrag(Index As Integer, _
Data As MSComctlLib.DataObject, AllowedEffects As Long)
' pass the Key property of the Node being dragged
'将nodSource.Key插入DataObject对象
Data.SetData nodSource.Key
If keyState And vbCtrlMask Then
'使用了Ctrl键,这时是复制操作
AllowedEffects = vbDropEffectCopy
Else
'没有使用Ctrl键,这时是移动操作
'删除拖放的源数据
AllowedEffects = vbDropEffectMove
End If
End Sub'当一个部件在另一个部件上拖动时引发
'Index为0或1表示树状浏览器控件数组的元素
Private Sub TreeView1_OLEDragOver(Index As Integer, _
Data As MSComctlLib.DataObject, Effect As Long, _
Button As Integer, Shift As Integer, x As Single, y As Single, _
State As Integer)
'当鼠光标位于节点上时,节点高亮显示
Set TreeView1(Index).DropHighlight = TreeView1(Index).HitTest(x, y)
End Sub'源部件放到目标部件时引发
'Index为0或1表示树状浏览器控件数组的元素
Private Sub TreeView1_OLEDragDrop(Index As Integer, _
Data As MSComctlLib.DataObject, Effect As Long, _
Button As Integer, Shift As Integer, x As Single, y As Single)
Dim nodDest As Node, nodA As Node
'拖放的目标节点
Set nodDest = TreeView1(Index).DropHighlight
If nodDest Is Nothing Then
'将该节点作为目标树状浏览器的根节点
Set nodA = TreeView1(Index).Nodes.Add(, , , nodSource.Text, _
nodSource.Image)
Else
'检查目标节点是不是与源节点等同
If treSource Is TreeView1(Index) Then
Set nodA = nodDest
Do
If nodA Is nodSource Then '目标节点与源节点等同
MsgBox "不能拖放!", vbExclamation
Exit Sub
End If
Set nodA = nodA.Parent
Loop Until nodA Is Nothing
End If
Set nodA = TreeView1(Index).Nodes.Add(nodDest.Index, _
tvwChild, , nodSource.Text, nodSource.Image)
End If
nodA.ExpandedImage = 2 '展开图形
nodA.Expanded = True
treCopySub treSource, nodSource, TreeView1(Index), nodA
' if this is a move operation, delete the source subtree
If Effect = vbDropEffectMove Then
treDeleSub treSource, nodSource
End If
Set TreeView1(Index).DropHighlight = Nothing
End Sub
TreeView1.LabelEdit = tvwManual