TREEVIEW SELECIONANDO PAI E FILHOS

FELIPEB31 23/04/2013 11:13:41
#422353
Pessoal,

Não estou encontrando um recurso e não consegui resolver.
Tenho uma TreeView de 5 níveis (com a opção Checkboxes = True) e nele preciso que quando o usuário check um item, por exemplo, o ultimo nível, ele já selecione os outros 4 níveis superiores sozinhos.
Ou também quando ele check o item Pai, ele já marque os itens filhos sozinhos.

Já encontrei material sobre isso, mais infelizmente não consegue fazer com 5 níveis funcionasse.

Agradeço


Option Explicit


Private Sub Form_Load()
Dim nd As Node
Set nd = TreeView1.Nodes.Add(, , [Ô]Menu1[Ô], [Ô]Descrição do Menu 1[Ô])
nd.Tag = [Ô]N1[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu1[Ô], tvwChild, [Ô]Menu1_1[Ô], [Ô]Descrição do SubMenu 1_1[Ô])
nd.Tag = [Ô]N2[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu1_1[Ô], tvwChild, [Ô]Menu1_1_1[Ô], [Ô]Descrição do SubSubMenu 1_1_1[Ô])
nd.Tag = [Ô]N3[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu1_1[Ô], tvwChild, [Ô]Menu1_1_2[Ô], [Ô]Descrição do SubSubMenu 1_1_2[Ô])
nd.Tag = [Ô]N3[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu1_1[Ô], tvwChild, [Ô]Menu1_1_3[Ô], [Ô]Descrição do SubSubMenu 1_1_3[Ô])
nd.Tag = [Ô]N3[Ô]
Set nd = TreeView1.Nodes.Add(, , [Ô]Menu2[Ô], [Ô]Descrição do Menu 2[Ô])
nd.Tag = [Ô]N1[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu2[Ô], tvwChild, [Ô]Menu2_1[Ô], [Ô]Descrição do SubMenu 2_1[Ô])
nd.Tag = [Ô]N2[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu2[Ô], tvwChild, [Ô]Menu2_2[Ô], [Ô]Descrição do SubMenu 2_2[Ô])
nd.Tag = [Ô]N2[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu2[Ô], tvwChild, [Ô]Menu2_3[Ô], [Ô]Descrição do SubMenu 2_3[Ô])
nd.Tag = [Ô]N2[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu2_3[Ô], tvwChild, [Ô]Menu2_3_1[Ô], [Ô]Descrição do SubSubMenu 2_3_1[Ô])
nd.Tag = [Ô]N3[Ô]
Set nd = TreeView1.Nodes.Add(, , [Ô]Menu3[Ô], [Ô]Descrição do Menu 3[Ô])
nd.Tag = [Ô]N1[Ô]
Set nd = TreeView1.Nodes.Add([Ô]Menu3[Ô], tvwChild, [Ô]Menu3_1[Ô], [Ô]Descrição do SubMenu 3_1[Ô])
nd.Tag = [Ô]N2[Ô]
End Sub


Private Sub Treeview1_NodeCheck(ByVal Node As MSComctlLib.Node)
Dim i As Integer
Dim x As Integer

With TreeView1
If .Nodes.Item(Node.Index).Checked = True Then
For i = CLng(.Nodes.Item(Node.Index).Index) To CLng(.Nodes.Item(Node.Index).Index + .Nodes.Item(Node.Index).Children)
.Nodes.Item(Node.Index).Checked = True
If .Nodes.Item(i).Children <> 0 Then
For x = CLng(.Nodes.Item(i).Index) To CLng(.Nodes.Item(i).Index + .Nodes.Item(i).Children)
.Nodes.Item(x).Checked = True
Next
End If
Next

If .Nodes.Item(Node.Index).Tag = [Ô]N3[Ô] Then
.Nodes.Item(Node.Index).Parent.Checked = True
.Nodes.Item(.Nodes.Item(Node.Index).Parent.Index).Parent.Checked = True
ElseIf .Nodes.Item(Node.Index).Tag = [Ô]N2[Ô] Then
.Nodes.Item(Node.Index).Parent.Checked = True
End If

ElseIf .Nodes.Item(Node.Index).Checked = False Then
For i = CLng(.Nodes.Item(Node.Index).Index) To CLng(.Nodes.Item(Node.Index).Index + .Nodes.Item(Node.Index).Children)
.Nodes.Item(Node.Index).Checked = False
If .Nodes.Item(i).Children <> 0 Then
For x = CLng(.Nodes.Item(i).Index) To CLng(.Nodes.Item(i).Index + .Nodes.Item(i).Children)
.Nodes.Item(x).Checked = False
Next
End If
Next
End If

End With
End Sub
FELIPEB31 23/04/2013 11:43:36
#422358
Nessa caso funciona com 3 níveis

Mas preciso que seja com 5 níveis, só que as vezes existe alguns que não são 5 níveis,

As vezes são 1 nível, 2 níveis, 3 níveis, 4 níveis e até 5 níveis.
Tópico encerrado , respostas não são mais permitidas