标题: 请教一个树节点展开问题。 [打印本页] 作者: fnsmydyang 时间: 2012-6-29 14:47 标题: 请教一个树节点展开问题。 最近碰到一个小问题,一直还未找到解决问题最佳方法,请大侠指点。
当树节点多时,怎样才能做到只展开当前节点,其它节点不展开,多多指教,是否要用到递归算法? 作者: Henry D. Sy 时间: 2012-6-29 14:57
应该本来就是这样的,你能传例子吗作者: Henry D. Sy 时间: 2012-6-29 15:06
TreeView1.Nodes(索引).Expanded = True作者: roych 时间: 2012-6-29 15:34
附上红尘的一个实例供参考:[attach]49534[/attach]作者: fnsmydyang 时间: 2012-6-29 15:45
谢谢热心的版主,我的意思是只展开当前目录下的节点,其它节点都收起来。
[attach]49535[/attach]
[attach]49536[/attach]
作者: Henry D. Sy 时间: 2012-6-29 16:27
你的例子就是你所要求的呀作者: Henry D. Sy 时间: 2012-6-29 16:48 本帖最后由 Henry D. Sy 于 2012-6-29 16:49 编辑
呵呵,原来你是想展开这个关闭哪个!!
Private Sub xTree_NodeClick(ByVal Node As Object)
On Error Resume Next
Dim tree0 As TreeView
Set tree0 = Me.xTree.Object
'tree0.SelectedItem.Parent.Text
lngKM = Nz(Right(Node.Key, Len(Node.Key) - 1))
Dim I As Integer
For I = 1 To tree0.Nodes.Count
tree0.Nodes(I).Expanded = False
Next I
tree0.Nodes(Node.Index).Expanded = True
End Sub
复制代码
[attach]49538[/attach]作者: fnsmydyang 时间: 2012-6-29 20:07
版主,这个方法我已用过了,行不通,有问题,要不您再试试。如果当前节点有父节点,如果父节点未展开,收缩了,当前节点怎么展的开呢?作者: Henry D. Sy 时间: 2012-6-29 20:14
说得是呀作者: 咱家是猫 时间: 2012-6-29 20:33
Private Sub xTree_NodeClick(ByVal Node As Object)
On Error Resume Next
Dim I As Integer
Dim tree0 As TreeView
Set tree0 = Me.xTree.Object
If inttreeIndex <> 0 Then
Me.xTree.Nodes(inttreeIndex).Expanded = False
End If
inttreeIndex = Node.Index
lngKM = Nz(Right(Node.Key, Len(Node.Key) - 1))
For I = 1 To tree0.Nodes.Count
tree0.Nodes(I).Expanded = False
Next I
tree0.Nodes(Node.Index).Selected = True
End Sub 作者: fnsmydyang 时间: 2012-6-29 21:11
谢谢版主,问题解决了,正是如此,只是节点有点闪。作者: 咱家是猫 时间: 2012-6-30 08:18
闪是因为每次都循环收起了一遍造成的.理论上这是在浪费资源.可以试着用变量记录上次的节点,点击下一个节点时判断一下.那就是最合理的了.作者: 咱家是猫 时间: 2012-6-30 09:04
Private Sub xTree_NodeClick(ByVal Node As Object)
On Error Resume Next
Dim tree0 As TreeView
Static intLastNode As Integer
Set tree0 = Me.xTree.Object
If intLastNode <> 0 Then
Debug.Print GetParentIndex(Node), intLastNode
If GetParentIndex(Node) <> intLastNode Then
Me.xTree.Nodes(intLastNode).Expanded = False
End If
End If
strPath = "\" & Node.FullPath & "\"
If intLastNode <> 0 Then
For i = 1 To tree0.Nodes.Count
If tree0.Nodes(i).Expanded = True Then
If InStr(strPath, "\" & tree0.Nodes(i).Text & "\") = 0 Then
tree0.Nodes(i).Expanded = False
End If
End If
Next i
End If
版主,我是用数组存储Indext 值,但是闪的问题不能解决,请帮忙,谢谢!!!
Private Sub xTree_NodeClick(ByVal Node As Object)
On Error Resume Next
Dim NodeP As Node
Dim N As Integer
Dim I As Integer
Dim IntParentIndext() As Integer
Set NodeP = Node
For N = 0 To 100
If Not (NodeP.Parent Is Nothing) Then
Set NodeP = NodeP.Parent
'MsgBox NodeP.Index
IntParentIndext(N) = NodeP.Index
Else
Exit For
End If
Next
For I = 0 To UBound(IntParentIndext())
For J = 1 To Me.xTree.Nodes.Count
If IntParentIndext(I) <> Me.xTree.Nodes(J).indext Then
Me.xTree.Nodes(J).Expanded = False
Else
End If
Next J
Next I
Me.xTree.Nodes(Node.Index).Selected = True
End Sub 作者: 咱家是猫 时间: 2012-6-30 21:10
22楼的方法不行吗?作者: fnsmydyang 时间: 2012-6-30 22:05