目标需求
选中任意一个节点后,其父节点及相关的所有子节点的颜色都发生变化.其它不相关的父节点及相关的子节点,全部为初始状态.
谢谢.

解决方案 »

  1.   

        Dim nodX As MSComctlLib.Node
        
        Me.TreeView1.SelectedItem.Image = 2 'another color
        For Each nodX In Me.TreeView1.SelectedItem.Child
            nodX.Image = 2 'another color
        Next nodX
      

  2.   


    谢谢,回复。试了一下。好像要加Image.
    需要消化。谢谢。
      

  3.   

    Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
        With Node
          .ForeColor = vbRed      
        End With
    End Sub
    这只能改变一个节点的颜色。向着目标接近。
      

  4.   

    相关知识总结。
    在属性中,将复选框打勾。下面是全代码。
    Option ExplicitPrivate Sub Form_Load()
        ' 初始化控件的内容
        Call InitTreeData
        TVW.Nodes(1).Selected = True    ' 根节点为当前节点
        TVW.Nodes(1).EnsureVisible      ' 根节点可见
    End Sub' 初始化控件的内容
    Private Sub InitTreeData()
        Dim i As Integer
        
        ' 增加节点
        'TVW.Nodes.Add , , "Root", "Root"
        For i = 1 To 5
            TVW.Nodes.Add , tvwChild, "Child" & CStr(i), "Child1" & CStr(i)
        Next i
        For i = 1 To 5
            TVW.Nodes.Add "Child1", tvwChild, "1GrandChild" & CStr(i), "GrandChild" & CStr(i)
        Next i
        For i = 1 To 5
            TVW.Nodes.Add "Child3", tvwChild, "2GrandChild" & CStr(i), "GrandChild" & CStr(i)
        Next i
        For i = 1 To 5
            TVW.Nodes.Add "Child5", tvwChild, "3GrandChild" & CStr(i), "GrandChild" & CStr(i)
        Next i
        For i = 1 To 5
            TVW.Nodes.Add "1GrandChild1", tvwChild, "GreatGrandChild" & CStr(i), "GreatGrandChild" & CStr(i)
        Next i
        
        ' 将节点展开
        TVW.Nodes(1).Expanded = True
    End Sub' 选取节点
    Private Sub TVW_NodeCheck(ByVal Node As MSComctlLib.Node)
         gCheckChildrenBySelf TVW, Node.Index, Node.Checked
         gCheckParentBySibling TVW, Node.Index
    End Sub' 根据自身选取情况,确定全选或取消其下所有子项
    Private Sub gCheckChildrenBySelf(TVW As TreeView, ByVal curIndex As Integer, ByVal bCh As Integer)
        Dim n As Integer    If TVW.Nodes(curIndex).Children <= 0 Then
            Exit Sub
        Else
            n = TVW.Nodes(curIndex).Child.Index
            Do While n <> TVW.Nodes(curIndex).Child.LastSibling.Index
                TVW.Nodes(n).Checked = bCh
                gCheckChildrenBySelf TVW, n, bCh
                n = TVW.Nodes(n).Next.Index
            Loop
            TVW.Nodes(n).Checked = bCh
            gCheckChildrenBySelf TVW, n, bCh
        End If
    End Sub' 根据同层、同父节点的选取情况,确定是否选取其父(乃至更上层),直至根节点
    Private Sub gCheckParentBySibling(TVW As TreeView, ByVal curIndex As Integer)
        Dim n As Integer
        Dim bHaveChecked As Boolean    If TVW.Nodes(curIndex).FirstSibling.Index = 1 Then
            Exit Sub
        Else
            bHaveChecked = False
            n = TVW.Nodes(curIndex).FirstSibling.Index
            Do While n <> TVW.Nodes(curIndex).LastSibling.Index
                If TVW.Nodes(n).Checked = True Then
                    bHaveChecked = True
                    Exit Do
                End If
                n = TVW.Nodes(n).Next.Index
            Loop
            If TVW.Nodes(n).Checked = True Then
                bHaveChecked = True
            End If
            
            If bHaveChecked = True Then
                TVW.Nodes(curIndex).Parent.Checked = vbChecked
            Else
                TVW.Nodes(curIndex).Parent.Checked = vbUnchecked
            End If
            
            gCheckParentBySibling TVW, TVW.Nodes(curIndex).Parent.Index
        End If
    End Sub