Dando continuação ao artigo - Usando o Controle TreeView - vamos agora por em prática a teoria exposta na primeira parte e mostrar na prática como usar este importante controle.
Você já sabe que podemos usar imagens no controle TreeView , na verdade toda vez que você quiser imagens no controle TreeView deverá usar juntamente com ele o controle ImageList. O controle ImageList irá conter as imagens que serão exibidas nos Nós. Vejamos um exemplo prático:
Vamos usar o controle Treeview exibindo imagens nos Nós e para isto vamos precisar primeiro configurar o controle ImageList, então :
Observe que temos ao lado do formulário do projeto a janela Property Pages do controle ImageList sendo exibida. A janela exibe as imagens que iremos usar no controle Treeview , elas são incluídas através do botão Insert Picture . Cada imagem possui uma propriedade index que é um número seqüencial que identifica cada imagem. A propriedade Key será usada para identifica a imagem que vamos usar nos Nós do controle TreeView. Assim temos associadas a cada imagem a propriedade Key definida como: Fechado, Aberto e Arquivo.
Após configurarmos o controle ImageList temos que associá-lo ao controle TreeView . Podemos fazer isto através da propriedade ImageList da janela Property Pages do controle ou via código , assim:
Vamos exibir agora o resultado de cada botão de comando e o seu código associado:
Etapa1: Criando um único Nó com uma imagem. Note que deixamos a propriedade Parent vazia pois queremos criar um Nó no Topo ou seja um Nó Raiz , e ele não possui nenhum Nó relacionado.
Private Sub Command1_Click() 'limpa qualquer nó criado TreeView1.Nodes.Clear 'Associa o controle
ImageList1 ao controle Treeview |
|
Criando um Nó Raiz e exibindo a Imagens com a key definida como "Fechado" no ImageList no Nó criado |
Etapa2: Criando vários Nós. Observe que neste exemplo , ao criarmos os nós filhos fazemos referência ao Nó Root (Nó Filho 1 , Nó Filho 2 e Nó Filho 3) e ao nó Child (Nó Filho 1-A e Nó Filho 1-B) conforme o relacionamento dos nós filhos. A propriedade Expanded de cada Nó é usada para exibir a ramificação presente nos Nós.
Private Sub Command2_Click()
Dim nodx As Node |
Etapa3: Percorrendo os Nós através da ramificação. O código em azul foi acrescido para fazer este serviço. A mensagem é exibida indicando nó atual.
Private Sub Command3_Click() Dim nodx As Node Set TreeView1.ImageList = ImageList1 'limpa qualquer nó criado TreeView1.Nodes.Clear Set nodx = TreeView1.Nodes.Add(, , "Root", "Nó Raiz", "Fechado") 'Expandindo o nó raiz para exibir as ramificações nodx.ExpandedImage = "Aberto" nodx.Expanded = True 'Criando um nó filho sob o nó raiz Set nodx = TreeView1.Nodes.Add("Root", tvwChild, "Child1", "Nó Filho 1", "Fechado") 'Expandindo o nó para exibir as ramificações nodx.ExpandedImage = "Aberto" nodx.Expanded = True 'Criando mais nós filhos Set nodx = TreeView1.Nodes.Add("Root", tvwChild, "Child2", _ "Nó Filho 2", "Arquivo") Set nodx = TreeView1.Nodes.Add("Root", tvwChild, "Child3", _ "Nó Filho 3", "Arquivo") Set nodx = TreeView1.Nodes.Add("Root", tvwChild, "Child4", _ "Nó Filho 4", "Arquivo") 'Criando dois nós filhos subordinado a ao primeiro nó filho da raiz Set nodx = TreeView1.Nodes.Add("Child1", tvwChild, "Child1A", _ "Nó Filho 1-A", "Arquivo") Set nodx = TreeView1.Nodes.Add("Child1", tvwChild, "Child1B", _ "Nó Filho 1-B", "Arquivo") 'Criando um laço para percorrer cada nó filho do nó raiz |
Etapa4: Atribuindo Nós relacionados aos diretórios do sistema. Clicando em cada Nó teremos o caminho do diretório exibido na mensagem através da propriedade FullPath. (exibe o nome do Nó)
Private Sub Command4_Click() Dim nodx As Node Set TreeView1.ImageList = ImageList1 TreeView1.Nodes.Clear 'Insere um drive Set nodx = TreeView1.Nodes.Add(, , , "c:", "Fechado") nodx.ExpandedImage = "Aberto" nodx.Expanded = True 'Inclui diretorio Set nodx = TreeView1.Nodes.Add(nodx, tvwChild, , "Windows", "Fechado") nodx.ExpandedImage = "Aberto" nodx.Expanded = True 'Inclui outro diretorio Set nodx = TreeView1.Nodes.Add(nodx, tvwChild, , "System", "Fechado") nodx.ExpandedImage = "Aberto" nodx.Expanded = True End Sub |
Etapa5: Criando Nós e permitindo a expansão e contração do Nó. Ao clicar em cada Nó teremos uma mensagem indicando o nome do Nó. Os evento Collapse e Expand permite a retração e expansão dos Nós.
O evento NodeCheck verifica o nó clicado e o evento NodeClick exibe o nome do Nó.
Private Sub Command5_Click() Dim nodx As Node Dim nodr As Node Set TreeView1.ImageList = ImageList1 'limpa qualquer nó criado TreeView1.Nodes.Clear 'exibe linhas TreeView1.LineStyle = tvwTreeLines 'Exibindo caixa de verificacao TreeView1.Checkboxes = True 'Inclui itens Set nodx = TreeView1.Nodes.Add(, , , "Item 1", "Fechado") Set nodx = TreeView1.Nodes.Add(, , , "Item 2") Set nodx = TreeView1.Nodes.Add(, , , "Item 3") 'expande Nó nodx.Expanded = True Set nodr = TreeView1.Nodes.Add(nodx, tvwChild, , "Item 4") nodr.Expanded = True Set nodx = TreeView1.Nodes.Add(nodr, tvwChild, , "Item 5") Set nodx = TreeView1.Nodes.Add(nodr, tvwChild, , "Item 6") Set nodx = TreeView1.Nodes.Add(nodr, tvwChild, , "Item 7") Set nodx = TreeView1.Nodes.Add(, , , "Item 8") End Sub ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) |
Bem , vamos mostrar agora algo realmente que seja útil , vamos mostra como usar o controle Treeview com um banco de dados onde iremos exibir os dados de uma tabela. Para isto vamos precisar de um banco de dados , e de uma tabela . A tabela deverá possuir uma estrutura adequada , de forma que possamos exibir os dados através do controle TreeView.
Vamos supor que queremos exibir os dados da tabela Alunos presente no banco de dados Access - escola.mdb. A estrutura da tabela Alunos é a seguinte:
Tabela Alunos - contém os dados dos alunos | Tabela Filiais - Contém o nome das filiais da escola |
A idéia é usar o controle Treeview para exibir os dados usando a seguinte hierarquia : Filiais - > nome das filiais -> nome de cada classe que a filial possui -> nome dos alunos para cada classe.
Vamos usar portanto a tabela Filiais para exibir o nome das filiais no TreeView. A tabela Alunos será usada para exibir os nomes das classes e dos alunos. Mãos a obra...
Desenho do formulário com o controle TreeView e ImageList | Configuração do Controle ImageList |
Agora basta inserir o código como indicado abaixo:
Seção General Declarations - define as variáveis usadas no projeto |
Public rsAlunos As New ADODB.Recordset Public rsFiliais As New ADODB.Recordset Public cn As ADODB.Connection Dim CodigoFilial As String Dim NomeFilial As String Dim classe As String Dim mNode As Node |
Evento Form Load - cria conexão com o banco de dados e os recordsets |
Private Sub Form_Load() On Error GoTo errFind Set TreeView1.ImageList = ImageList1 Set cn = New ADODB.Connection With cn .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\teste\Escola.mdb" .Open End With rsAlunos.Open "Select * from Alunos", cn, adOpenStatic, adLockOptimistic rsFiliais.Open "Select * From Filiais", cn, adOpenStatic, adLockOptimistic ' Configura o TreeView With TreeView1 Set mNode = TreeView1.Nodes.Add(, , "Root", "Filiais", "Fechado") .Sorted = True End With Exit Sub errFind: If Err = -2147467259 Then Set cn = Nothing MsgBox "Arquivo nao localizado ", vbInformation, "Usando Treeview na pratica." Unload Me Else MsgBox Err.Description End If End Sub |
Evento Click do botão de comando - Criar Árvore de dados - Carrega o nome das filiais na árvore |
Private Sub Command1_Click() Do While Not rsFiliais.EOF TreeView1.Nodes.Add "Root", tvwChild, rsFiliais("Nome"), rsFiliais("Nome"), "Aberto" rsFiliais.MoveNext Loop End Sub |
Código do Evento click do botão de comando - Preencher com os nomes das classes |
Private Sub Command2_Click() rsFiliais.MoveFirst Do While Not rsFiliais.EOF NomeFilial = rsFiliais("nome") CodigoFilial = rsFiliais("codigo") Do While Not rsAlunos.EOF If rsAlunos("filial") = CodigoFilial Then If rsAlunos("classe") <> classe Then TreeView1.Nodes.Add NomeFilial, tvwChild, , rsAlunos("classe"), "Fechado" End If End If classe = rsAlunos("classe") rsAlunos.MoveNext Loop rsFiliais.MoveNext rsAlunos.MoveFirst Loop End Sub |
O resultado da execução deste código é o seguinte:
Como exercício , que tal preencher as classes com os nomes dos alunos ???
Vou ficando por aqui... adios...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#