Aplicação Windows - TreeView

Nesta aula iremos aprender um componente muito utilizado para aplicações Windows Forms e WebForms, iremos entender para que serve os nodes e como criar em tempo de execução.

assinaturaAssine nossa Comunidade

Aplicação Windows - TreeView

TreeView

O componente TreeView serve para visualizar informações no formato de árvore. É utilizado tanto em aplicações Windows como Web Forms.

Nodes

No TreeView existem os nós que podem ser criados dentro de outros nós, que são chamados nodes.Os nodes são arrays que formam estruturas encadeadas.

Nodes é uma coleção de TreeNode ou array de TreeNode. Nesta lista de Nodes temos um método chamado add. O método add pode receber:

  • Node ;
  • String.

Nodes são recursivos, pois toda vez que é criado um objeto node, ele tem uma propriedade chamada nodes, tornando essa forma recursiva, podendo colocar nós dentro de vários nós.

Exemplos de estruturas com visualização em árvore são Menus, Listar diretórios, Upload de arquivos que mostra a lista de diretórios, controle de acessos, entre outros.

Checkboxes

Temos outra propriedade no Treeview chamada checkboxes que serve basicamente para selecionar item que queremos utilizar, podendo em seguida fazer um foreach de nodes e em cada nodes, utilizar a propriedade checked que recebe um boolean true ou false.

Inserir Treeview no formulário

  • Localizar o componente Treeview na ToolBox ;
  • Arrastar e soltar o componente para o formulário;

Adicionar Nodes manualmente

Ao clicar com o botão direito no componente Treeview, podemos adicionar manualmente os nodes clicando no botão Add Root .

Para adicionar nodes filhos , clicar no node pai que deseja adicionar e então clicar no botão Add Child .

Inserir funcionalidades no TreeView

AfterSelect

O C# cria o método AfterSelect ao clicar duas vezes no checkbox. Nele podemos codificar a ação que queremos executar quando clicarmos no checkbox, segue exemplo abaixo:

      
        //Toda vez que o nó está selecionado, é executada uma ação. Dessa forma saberemos de qual nó será 
        //esta ação através do TreeViewEventArgs e dentro deste evento temos o e.Node que foi selecionado.
       
        namespace WindowsFormsApplication  
        {
         public partial class FrmTreeView : Form 
         
         {
           public FrmTreeView()
           {
             InitializeComponent();
           }
           private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
           {
              MessageBox.Show(e.Node.Text);
           }
         }
        }
       
    

Checked

Vamos criar uma função recursiva que armazena em uma string quais nós estão selecionados:

      
        
        //Função recursiva lerChecados, que verifica se os nós estão selecionados 

        namespace WindowsFormsApplication  
        {
         public partial class FrmTreeView : Form 
         
         {
           public FrmTreeView()
           {
             InitializeComponent();
           }

           private void button1_Click(object sender, TreeViewEventArgs e)
           {
              MessageBox.Show(lerChecados(treeView1.Nodes[0]));
           }

           private string lerChecados(TreeNode node, string checkeds = "")
           {
             foreach (TreeNode n in node.Nodes)
             {
               if(n.Checked)
               {
                checkeds+= n.Text + ", ";
               }
               checkeds = lerChecados(n,checkeds);
             }
             return checkeds;
           }
         }
        }
       
    

Inserir Nodes no Treeview em tempo de execução

Vamos mostrar um exemplo para listar todos os diretórios de um caminho específico:

  1. Limpar todos os TreeViews feitos de forma manual;
  2. Criar diretório raiz chamado estudos;
  3. Enviar o node criado como referência para a função loadDiretorios;
  4.             
                  namespace WindowsFormsApplication  
                  {
                    public partial class FrmTree : Form 
                    {
                      public FrmTree()
                      {
                        InitializeComponent();
                      }
                      private void FrmTree_Load(object sender, EventArgs e)
                      {
                        treeView1.Nodes.Clear();
                        treeView1.Nodes.Add("estudos");
                        var node = treeView1.Nodes[0];
                        loadDiretorios(" @c:\projetos\estudos\ ",ref node);
                      }
                    }
                  }
                 
              
  5. A Função loadDiretorios recebe o diretorio e o nó;
  6. Armazena na variavel array arquivos todos os arquivos dentro deste diretório;
  7. É feito um foreach deste array de arquivos;
  8. Dentro deste array, obter o nome do arquivo;
  9. Criar um novo nó com o nome do arquivo através do nó passado como referência;
  10. Após criar todos os arquivos, seguir para criar diretórios
  11. É feito um foreach de todos os diretórios;
  12. Faz a recursividade para ler os arquivos dentro deste diretório;
  13.             
                  namespace WindowsFormsApplication  
                  {
                    public partial class FrmTree : Form 
                    {
                      public FrmTree()
                      {
                        InitializeComponent();
                      }
                      private void loadDiretorios(string diretorio, ref TreeNode node)
                      {
                        string[] arquivos = Diretory.GetFiles(diretorio);
                        foreach(string arquivo in arquivo) 
                        {
                          node.Nodes.Add(Path.GetFileName(arquivo));
                        }
    
                        string[] subdiretorios = Diretory.GetDirectories(diretorio);
                        foreach(string subdiretorio in subdiretorios) 
                        {
                          TreeNode n = TreeNode(Path.GetFIleName(subdiretorio));
                          loadDiretorios(subdiretorio, ref n);
                          node.Nodes.Add(n));
                        }
                      }
                    }
                  }
                 
              

Aplicação Windows - TreeView

Nesta aula iremos aprender um componente muito utilizado para aplicações Windows Forms e WebForms, iremos entender para que serve os nodes e como criar em tempo de execução.

Próximas Aulas:
assinaturaAssine nossa Comunidade

Aplicação Windows - TreeView

TreeView

O componente TreeView serve para visualizar informações no formato de árvore. É utilizado tanto em aplicações Windows como Web Forms.

Nodes

No TreeView existem os nós que podem ser criados dentro de outros nós, que são chamados nodes.Os nodes são arrays que formam estruturas encadeadas.

Nodes é uma coleção de TreeNode ou array de TreeNode. Nesta lista de Nodes temos um método chamado add. O método add pode receber:

  • Node ;
  • String.

Nodes são recursivos, pois toda vez que é criado um objeto node, ele tem uma propriedade chamada nodes, tornando essa forma recursiva, podendo colocar nós dentro de vários nós.

Exemplos de estruturas com visualização em árvore são Menus, Listar diretórios, Upload de arquivos que mostra a lista de diretórios, controle de acessos, entre outros.

Checkboxes

Temos outra propriedade no Treeview chamada checkboxes que serve basicamente para selecionar item que queremos utilizar, podendo em seguida fazer um foreach de nodes e em cada nodes, utilizar a propriedade checked que recebe um boolean true ou false.

Inserir Treeview no formulário

  • Localizar o componente Treeview na ToolBox ;
  • Arrastar e soltar o componente para o formulário;

Adicionar Nodes manualmente

Ao clicar com o botão direito no componente Treeview, podemos adicionar manualmente os nodes clicando no botão Add Root .

Para adicionar nodes filhos , clicar no node pai que deseja adicionar e então clicar no botão Add Child .

Inserir funcionalidades no TreeView

AfterSelect

O C# cria o método AfterSelect ao clicar duas vezes no checkbox. Nele podemos codificar a ação que queremos executar quando clicarmos no checkbox, segue exemplo abaixo:

      
        //Toda vez que o nó está selecionado, é executada uma ação. Dessa forma saberemos de qual nó será 
        //esta ação através do TreeViewEventArgs e dentro deste evento temos o e.Node que foi selecionado.
       
        namespace WindowsFormsApplication  
        {
         public partial class FrmTreeView : Form 
         
         {
           public FrmTreeView()
           {
             InitializeComponent();
           }
           private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
           {
              MessageBox.Show(e.Node.Text);
           }
         }
        }
       
    

Checked

Vamos criar uma função recursiva que armazena em uma string quais nós estão selecionados:

      
        
        //Função recursiva lerChecados, que verifica se os nós estão selecionados 

        namespace WindowsFormsApplication  
        {
         public partial class FrmTreeView : Form 
         
         {
           public FrmTreeView()
           {
             InitializeComponent();
           }

           private void button1_Click(object sender, TreeViewEventArgs e)
           {
              MessageBox.Show(lerChecados(treeView1.Nodes[0]));
           }

           private string lerChecados(TreeNode node, string checkeds = "")
           {
             foreach (TreeNode n in node.Nodes)
             {
               if(n.Checked)
               {
                checkeds+= n.Text + ", ";
               }
               checkeds = lerChecados(n,checkeds);
             }
             return checkeds;
           }
         }
        }
       
    

Inserir Nodes no Treeview em tempo de execução

Vamos mostrar um exemplo para listar todos os diretórios de um caminho específico:

  1. Limpar todos os TreeViews feitos de forma manual;
  2. Criar diretório raiz chamado estudos;
  3. Enviar o node criado como referência para a função loadDiretorios;
  4.             
                  namespace WindowsFormsApplication  
                  {
                    public partial class FrmTree : Form 
                    {
                      public FrmTree()
                      {
                        InitializeComponent();
                      }
                      private void FrmTree_Load(object sender, EventArgs e)
                      {
                        treeView1.Nodes.Clear();
                        treeView1.Nodes.Add("estudos");
                        var node = treeView1.Nodes[0];
                        loadDiretorios(" @c:\projetos\estudos\ ",ref node);
                      }
                    }
                  }
                 
              
  5. A Função loadDiretorios recebe o diretorio e o nó;
  6. Armazena na variavel array arquivos todos os arquivos dentro deste diretório;
  7. É feito um foreach deste array de arquivos;
  8. Dentro deste array, obter o nome do arquivo;
  9. Criar um novo nó com o nome do arquivo através do nó passado como referência;
  10. Após criar todos os arquivos, seguir para criar diretórios
  11. É feito um foreach de todos os diretórios;
  12. Faz a recursividade para ler os arquivos dentro deste diretório;
  13.             
                  namespace WindowsFormsApplication  
                  {
                    public partial class FrmTree : Form 
                    {
                      public FrmTree()
                      {
                        InitializeComponent();
                      }
                      private void loadDiretorios(string diretorio, ref TreeNode node)
                      {
                        string[] arquivos = Diretory.GetFiles(diretorio);
                        foreach(string arquivo in arquivo) 
                        {
                          node.Nodes.Add(Path.GetFileName(arquivo));
                        }
    
                        string[] subdiretorios = Diretory.GetDirectories(diretorio);
                        foreach(string subdiretorio in subdiretorios) 
                        {
                          TreeNode n = TreeNode(Path.GetFIleName(subdiretorio));
                          loadDiretorios(subdiretorio, ref n);
                          node.Nodes.Add(n));
                        }
                      }
                    }
                  }