A. Introdução .
O Microsoft Tree View Control faz parte dos controles comuns do Microsoft Windows. É um objeto interessante que exibe dados relacionados em uma hierarquia de nós. Ele pode exibir dados relacionados, como entradas e subentradas em uma lista de índice ou listagem de pastas como o painel esquerdo do Windows Explorer ou uma lista de itens relacionados em uma estrutura hierárquica com linhas de árvore, caixas de seleção e gráficos de imagens de bitmap .
O ListView e ImageList Os controles fazem parte dos controles comuns do Windows e os usaremos junto com o controle TreeView no Microsoft Access.
Acho que você gostaria de ver alguns exemplos de imagens de demonstração de controle do TreeView, que estaremos trabalhando na construção nas próximas semanas.
B. Imagens de demonstração de amostra .
Nós no estado Recolhido.
- A amostra de imagem TreeView de demonstração com todos os nós no formato recolhido.
Nós na visualização expandida.
- Os nós de controle TreeView acima na visualização expandida.
Com ícones de imagem de ponta de seta.
- Exibição de amostra do TreeView, com ícones de imagem com ponta de seta exibidos à esquerda de cada texto do nó.
Nós de nível raiz têm outras imagens de pasta com ponta de seta.
- A seguir, a exibição TreeView com dados vinculados em um subformulário. Os nós de nível raiz têm duas imagens. A imagem de pasta fechada é exibida no modo normal. Quando o nó de nível raiz recebe um clique do mouse, ele exibe a imagem de abertura de pasta e exibe os nós filho em formato expandido.
As informações relacionadas são exibidas no Subformulário com base na seleção do Nó de nível raiz.
Um dos itens do Child-Node selecionado exibe outro Form (normalmente mantido oculto) com informações relacionadas.
Controles TreeView e ListView
- Na próxima imagem do formulário, há dois painéis. Os nós relacionados ao item da categoria de produto estão no controle TreeView, no painel esquerdo. Quando um dos itens de categoria recebe um clique no controle TreeView, os itens de produto relacionados com quantidade e preço de tabela em colunas separadas aparecerão em ListView Controle, no painel do lado direito.
C. Criando dados de amostra para execução de teste.
Vamos experimentar o TreeView Control com alguns dados de exemplo mostrados abaixo, com base nas duas primeiras imagens mostradas no início desta página.
A tabela de dados de exemplo acima tem três campos.
-
O ID campo é um campo AutoNumeração com Números de ID exclusivos. O tipo AutoNumeração é selecionado para nossa conveniência. Em ambos os casos, todos os registros na tabela devem ter um valor de ID exclusivo. Se for Numérico, deve ser convertido em Tipo de String, antes de adicioná-lo ao Controle TreeView.
-
O segundo campo é a Descrição do nó (Desc ). As linhas de informações nesta Coluna estão relacionadas logicamente.
-
O terceiro ParentID campo é Tipo Numérico. Mas eles devem ser convertidos em String Type antes de usá-lo no TreeView Control.
Devemos saber como os valores da coluna de descrição estão relacionados entre si, com base nisso, podemos estabelecer o relacionamento inserindo valores relacionados no ParentID campo.
Por exemplo, o arranjo lógico do relacionamento entre Autor de Livros, Editores de Livros, Livrarias onde os Livros estão à Venda, ou Relação semelhante entre membros de uma Árvore Genealógica.
Relação entre Categoria de Produto, Produtos, Estoque, Preço e assim por diante. Todas essas informações podem não aparecer em uma coluna em uma única tabela. Eles podem aparecer em diferentes Colunas ou em diferentes tabelas também.
O ParentID O campo é muito importante na medida em que determina o arranjo hierárquico de Nodes. Se o campo ParentID estiver vazio, esse registro deverá ser um nó de nível raiz. O Child-Node sempre deve ter seu ParentID preenchido com seu valor de ID de registros pai.
O nó de nível raiz pode ter um ou mais nós filho(s), o nó filho pode ter seus próprios nós filhos.
Vamos carregar os dados acima em um TreeView Control e ver como fica. Em seguida, preencheremos o ParentId campo com ID relacionado s para alterar a visão, da maneira que queremos vê-la em uma ordem lógica.
D. Arquivo da Biblioteca de Controles Comuns do Windows .
-
Mas, antes de mais nada, abra um dos seus Bancos de Dados ou crie um novo.
-
Abra a janela VBA (ALT+F11 ) e selecione Referências… em Ferramentas Cardápio.
-
Procure o arquivo:Controles comuns do Microsoft Windows na lista de arquivos exibida e coloque uma marca de seleção para selecioná-lo.
Se você não conseguiu encontrar o arquivo na lista, clique em Procurar... Botão e localize o arquivo:MSCOMLIB.OCX no diretório do sistema Windows, para a versão Windows 7 procure o arquivo no SysWOW64 pasta. Clique em OK para fechar o controle de listagem de arquivos de biblioteca.
-
Crie uma tabela com a seguinte estrutura:
-
Salve a Tabela com o nome Amostra .
-
Preencha a Tabela com os dados de amostra de 12 registros conforme mostrado na imagem de visualização de dados acima.
E. Criando o controle TreeView no formulário
-
Crie um novo formulário em branco.
-
Clique nos Controles Activex botão dos Controles Grupo, localize o Controle do Microsoft TreeView em seguida, selecione-o.
-
Clique em OK para inserir um controle TreeView no formulário.
-
Arraste o controle para baixo e para a direita para deixar algum espaço na parte superior e esquerda do controle TreeView. Arraste a alça de dimensionamento do canto inferior direito em direção ao canto direito e inferior para aumentar o controle, como a imagem de exemplo fornecida abaixo.
-
Exiba a folha de propriedades do controle e altere seu Nome Valor da propriedade para TreeView0, se é diferente lá.
-
Exibir janela de edição VBA do formulário.
- Copie e cole o seguinte código VBA no módulo substituindo as linhas de código existentes:
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim strSQL As String Dim nodKey As String Dim ParentKey As String Dim strText As String Set tv = Me.TreeView0.Object strSQL = "SELECT ID, Desc, ParentID FROM Sample;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the TreeView Root Level Nodes tv.Nodes.Add , , nodKey, strText Else ParentKey = KeyPrfx & CStr(rst!ParentID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the Record as Child Node tv.Nodes.Add ParentKey, tvwChild, nodKey, strText End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
-
Salve o formulário com o nome frmSample, mas não feche a janela VBA.
G. Código VBA linha por linha.
F. Acesse o código VBA.
Vamos dar uma olhada rápida no código VBA e entender o que ele faz.
Na Área de Declaração Global, do Módulo Formulário, a Variável tv declarado como TreeView Objeto. O KeyPrfx declarado como Constante , com o valor de Tipo de String “X”.
O nó do TreeView O Key-Value de deve ser sempre do tipo String e precisa de pelo menos um caractere não numérico presente na Chave do Nó. Nossos valores-chave de tabela de amostra estão todos em formato numérico, podemos convertê-los e adicioná-los ao valor constante “X ”. O valor numérico convertido apenas em tipo de string não será aceito como chave de nó.
Observação: Se a chave de nó e Chave-pai os valores já estão na forma alfa ou alfanumérica, então a questão da conversão não surge. Todos os valores de Node-Key devem ser exclusivos.
No Form_Load() Event Procedure, os objetos Database e Recordset são declarados. Quatro Variáveis String também são declaradas.
A instrução Set tv =Me.TreeView0.Object declaração atribui, o TreeView0 Objeto no formulário, para a variável de objeto tv.
A instrução OpenRecordset() abre a Amostra Registros de tabela usando o SQL strSQL.
O Faça enquanto… garante que o conjunto de registros não esteja vazio, se estiver vazio, saia do Loop e encerrar o Programa.
Se houver registros, o ParentId do primeiro registro campo é verificado para a presença de algum valor lá ou não.
Se estiver vazio, esse registro é para o Nó de nível raiz do controle TreeView item. O nó de nível raiz precisa apenas da chave de nó exclusiva Valor, que já temos no ID Campo e item Descrição Valor do campo para Texto Argumento.
Se o ParentID campo tem algum valor, então o registro é um Child-Node (Filho do nó de nível raiz ou filho de algum nó filho de nível superior) do objeto TreeView.
A próxima linha cria a Chave Valor do argumento na nodKey Variável de string, com o ID Valor do campo, convertido em String e adicionado ao prefixo constante X, Node-Key torna-se X1 .
O primeiro!Desc valor do campo adicionado à variável de string strText, simplesmente para maior clareza e para torná-lo curto no Nodes.Add() listagem de parâmetros do método, se a referência do campo for muito longa, isso manterá o método Add() limpo e organizado.
A próxima linha executável:tv.Node.Add() chama o método Add() de TreeView.Nodes Objeto para adicionar o nó a TreeView0 controle no formulário frmSample .
A Sintaxe do método Add() é fornecido abaixo para referência:
tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
Todos os seis parâmetros do Add() método são opcionais. Se você chamar esse método sem nenhum parâmetro, um Nó de nível raiz vazio será adicionado e uma linha de árvore em branco aparecerá como um indicador no controle TreeView.
Para TreeView Raiz Nível Nó requer a Chave e Texto Valores de argumento.
Para os nós filhos, ambos [Relativo] e [Relacionamento] Argumentos são necessários. A omissão de qualquer um deles inserirá o Nó como Nó Raiz, mas não gerará nenhum erro.
[Relativo] é a NodKey de um Node existente, inserido no ParentID do registro relacionado campo. [Relacionamento] é uma constante tvwChild com valor numérico 4, identificando-o como um nó filho de chave- Valor em ParentID Campo.
A outra Constante os valores para o Argumento de Relacionamento são usados para posicionar Nós Filhos em um local específico. Os valores constantes são os seguintes:
tvwFirst =0, o coloca como o primeiro Node, no nível do Node relativo.
tvwÚltimo =1, coloca como último Node, no nível do Node relativo.
tvwNext =2, coloca o Node após um Node especificado.
tvwAnterior =3, coloca o Node imediatamente anterior ao Node especificado.
Observação: Você pode experimentar definindo cada valor no relacionamento Argumente e execute o código no modo de depuração, depois de manter a janela e o formulário do VBA na exibição normal lado a lado. Observe como os nós estão sendo organizados em cada ciclo de execução do código para entender.
Isso será útil ao editar o TreeView Control excluindo um item e inserindo outro item em seu lugar ou adicionando um novo nó em um local específico.
Um nó com chave [relativa] deve existir na coleção de nós antes de tentar adicionar um nó filho a esse nó, caso contrário, o método Add() gerará um erro.
Este processo é repetido até que todos os registros sejam processados no conjunto de registros.
Observação: Você pode revisar o código VBA novamente após as execuções de demonstração.
H. O primeiro teste.
Abra o formulário no modo de exibição normal. O resultado do teste será parecido com a imagem abaixo.
Não parece mais do que uma caixa de listagem normal. Lembre-se de que não preenchemos nenhum valor no ParentID campo em nossa amostra Tabela. Temos que estabelecer algum relacionamento entre os Items nas linhas de Record para movê-los e posicioná-los em ordem hierárquica no TreeView Control.
I. Entendendo a relação entre registros.
- Abra a Tabela de amostra e vamos examinar os registros e como eles estão relacionados.
- Vamos sair do banco de dados item sozinho como um item raiz.
O Database Object também possui alguns objetos de nível superior:Application, DBEngine, Workspaces Collection e Databases Collection , que omitimos aqui.
- Então temos as Tabelas item de grupo com ID valor 2.
- A próxima Tabela , Campos, Campo os itens estão relacionados às Tabelas grupo. Queremos a Tabela, Campos, e Campo itens a serem alinhados sob o item pai Tabelas Registro de grupo com valor de ID 2.
- Vamos chamar o registro de Tabelas como o Nó pai , Tabela, Campos e Registros de campo como Child-Nodes .
J. Atualizando o campo ParentID.
- Precisamos atualizar o valor 2 (Chave de nó de Tabelas ) no parentID campo de Tabela , Campos, e Campo registros.
- Atualize apenas esses registros e feche a Tabela. Quando isso for feito, os registros ficarão parecidos com a imagem fornecida abaixo:
-
Agora, abra seu frmSample em Form View e verifique o TreeView Control. O resultado será semelhante ao anterior sem qualquer alteração. As alterações já aconteceram, mas não estão visíveis para você.
K. A folha de propriedades do controle TreeView.
- Vire o frmSample na Visualização de design.
- Clique com o botão direito do mouse no controle TreeView e realce TreeCtrl_Object no menu de atalho e selecione Propriedades .
A folha de propriedades será semelhante à imagem fornecida abaixo:
- Alterar o Estilo de linha Propriedade Valor =1 (tvwRootLines) e clique no botão Aplicar botão e clique em OK para fechar a folha de propriedades.
L. Executar após o LineStyle Alteração do valor da propriedade
- Salve o formulário e abra-o na visualização normal. Agora, as Tree Lines estão aparecendo corretamente. As Tabelas O nó tem um sinal de adição (+ ) no lado esquerdo, indicando que este nó tem um ou mais nós filhos no próximo nível e eles não estão no formato expandido.
- Clique no símbolo de mais para expandir o nó e exibir os nós filhos, com o mesmo ParentID. Quando você clica no símbolo de menos, os nós filhos são recolhidos e ocultos, alterando o símbolo para um sinal de mais novamente.
- A exibição será semelhante à seguinte imagem quando expandida:
M. ID dos pais Atualização de outros registros.
Atualizaremos os Formulários registrar ID Valor (Valor da chave do nó) em Formulário, Controles, e Controle registros' ParentID campos para que esses registros sejam listados em Formulários Nó como seus nós filhos .
Da mesma forma, atualize o campo ParentID de Relatório e Controles registros com Relatórios ID (Node-Key Value) Valor para que Relatório e Controles os itens serão posicionados no nó pai Relatórios , pois são nós filhos .
-
Faça alterações nos registros da tabela de amostra com os valores ParentID conforme mostrado abaixo:
Após as alterações acima, o TreeView Display se parecerá com a seguinte imagem, quando todos os nós estiverem no formato expandido.
Todos os nós filhos relacionados aos nós de nível raiz:as tabelas, formulários e relatórios são agrupados como uma lista em seus nós pais. Mas um nó filho pode ter um nó pai, um nó avô ou um nó bisavô.
N. Organizando todos os objetos em ordem hierárquica lógica.
Por exemplo, vamos pegar o primeiro nó de nível raiz Tabelas . Logicamente Campo (com o ID de registro 5) está diretamente relacionado aos Campos coleção (registro ID 4), os Campos coleção relacionada a Tabela e Tabela faz parte de Tabelas coleção. Cada item do grupo (registro número 5 a 2) está relacionado um degrau até o próximo nível.
Então, vamos posicionar esses nós filho corretamente sob seu próprio nó pai e ver como fica.
-
Abra sua Tabela de Amostra e altere os valores ParentID das Tabelas relacionados aos Registros Filhos, conforme mostrado abaixo:
- O Campo com O pai do registro ID-5 é Campos, registro com ID-4, portanto, atualizamos o campo ParentID do 5º registro com o número de ID 4.
- Da mesma forma, o campo ParentID do 4º registro é atualizado com 3, e o ParentID do 3º registro é atualizado com o número de registro 2.
-
Observação: Não presuma que os itens organizados dessa maneira devem estar próximos uns dos outros.
- Após as alterações nos registros, salve a Tabela e abra o frmSample para visualizar as alterações. Sua exibição TreeView deve se parecer com a imagem abaixo, com todos os nós em formato expandido.
O TreeView Control tem sua própria folha de propriedades e as configurações influenciam sua aparência. Assim faremos uma alteração em uma de suas Propriedades e voltaremos a visualizar o TreeView novamente.
As configurações nesta folha de propriedades alteram a aparência da exibição TreeView.
A propriedade superior do lado esquerdo Estilo já está definido com o máximo de recursos disponíveis Opção-7 (tvwTreeLinesPlusMinusPictureText).
O Nó Filho de um Nó de nível Raiz pode ser um Nó Pai para seu próprio Filho ou Filhos. Dessa forma, ele pode descer vários degraus na árvore.
Altere os outros dois grupos de ParentID do nó filho valores de campo para se parecerem com a imagem fornecida acima.
OBJETO DO DICIONÁRIO
- Noções básicas de objetos do dicionário
- Noções básicas de objetos do dicionário-2
- Classificação de chaves e itens de objetos de dicionário
- Exibir registros do dicionário
- Adicionar objetos de classe como itens de dicionário
- Atualizar item do dicionário de objetos de classe