C# - Exibindo Arquivos e diretórios no TreeView com Progressbar
Neste artigo vou mostrar como exibir arquivos e diretórios em um controle TreeView usando a linguagem C#. |
Vamos criar uma aplicação Windows Forms na linguagem C# que vai utilizar um controle TreeView para exibir os arquivos e subdiretórios de uma pasta selecionada.
Para saber mais sobre o controle TreeView veja os meus artigos relacionados ao C# :
Recursos Usados:
Criando o projeto Windows Forms
Abra o VS 2017 Community e crie um projeto Windows Classic Desktop do tipo Windows Forms App(.NET Framework) com o nome CShp_TreeView:
No formulário Form1.cs do projeto inclua os seguintes controles:
1 Label - cboBusca
1 TextBox - txtDiretorio
1 Button - btnProcurar
1 TreeView - tvDados
1 Progressbar - pgbar1
1 Button - btnCarregarPasta
1 FolderBrowserDialog - fbdlg1
1 ImageList - imglst1
1 ToolTip - ToolTip1
Disponha os controle conforme o leiaute da figura abaixo:
Declare
os seguintes namespaces no formulário:
using System;
using System.IO;
using System.Windows.Forms;
Incluindo imagens no controle ImageList
Vamos incluir duas imagens no controle ImageList.
Para isso abra a janela de propriedades do controle e clique em Images e inclua a imagem para o arquivo e a imagem para a pasta conforme mostra a figura abaixo:
Após isso selecione o controle TreeView e defina a sua propriedade StateImageList igual ao controle ImageList : imglist1 conforme abaixo:
Implementando o código do formulário
1- Código do evento Click do botão btnProcurar que permite ao usuário selecionar uma pasta:
private void btnProcurar_Click(object sender, EventArgs e)
{
//atribui o valor da caixa de texto
fbdlg1.SelectedPath = txtDiretorio.Text;
//exibe o dialogo folderbrowser
DialogResult drResultado = fbdlg1.ShowDialog();
//atribui o nome da pasta selecionada à caixa de texto
if (drResultado == System.Windows.Forms.DialogResult.OK)
txtDiretorio.Text = fbdlg1.SelectedPath;
}
|
2- Código do evento Click do botão btnCarregarPasta que carrega os dados de uma pasta selecionada
private void btnCarregarPasta_Click(object sender, EventArgs e) { // Define o valor inicial da progressbar pgbar1.Value = 0; // Limpa todos os Nodes tvDados.Nodes.Clear(); toolTip1.ShowAlways = true; //Carrega os dados da Pasta informada se ela existir if (txtDiretorio.Text != "" && Directory.Exists(txtDiretorio.Text)) { CarregaDadosPasta(txtDiretorio.Text); } else { MessageBox.Show("Selecione uma pasta!!"); } } |
Precisamos definir o método CarregaDadosPasta().
3- Código do método CarregarDadosPasta
Neste código definimos o valor máximo para o controle ProgressBar com base na informação do diretório selecionado retornando o número de items existentes.
A seguire selecionamos um objeto do tipo TreeNode com o nome do diretorório informado e chamamos os métodos :
private void CarregaDadosPasta(string diretorio)
{
DirectoryInfo diretorioInfo = new DirectoryInfo(diretorio);
//Define o valor máximo do ProgressBar
pgbar1.Maximum = Directory.GetFiles(diretorio, "*.*", SearchOption.AllDirectories).Length + Directory.GetDirectories(diretorio, "**", SearchOption.AllDirectories).Length;
TreeNode tds = tvDados.Nodes.Add(diretorioInfo.Name);
tds.Tag = diretorioInfo.FullName;
tds.StateImageIndex = 0;
//carrega os arquivos e as subpastas
CarregaArquivos(diretorio, tds);
CarregaSubDiretorios(diretorio, tds);
}
|
4- Código do método CarregaArquivos
Neste código obtemos os arquivos do diretório e obtemos a informação do nome exibindo-o no TreeNode e atribuindo a imagem do ImageList de índice igual a 1:
private void CarregaArquivos(string diretorio, TreeNode tnd)
{
string[] arquivos = Directory.GetFiles(diretorio, "*.*");
// Percorre os arquivos
foreach (string arq in arquivos)
{
FileInfo arquivo = new FileInfo(arq);
TreeNode tds = tnd.Nodes.Add(arquivo.Name);
tds.Tag = arquivo.FullName;
tds.StateImageIndex = 1;
AtualizaProgressBar();
}
}
|
5- Código do método CarregaSubDiretorios
Neste código carregamos os subdiretórios da pasta selecionada e obtemos o nome atribuindo ao TreeNode.
A seguir chamamos novamente os métodos para obter os arquivos e subpastas que podem existir em cada subpasta.
private void CarregaSubDiretorios(string dir, TreeNode td)
{
// Pega todos os subdiretorios
string[] subdiretorioEntradas = Directory.GetDirectories(dir);
// Percorre os subdiretorios a ver se existem outras subpasts
foreach (string subdiretorio in subdiretorioEntradas)
{
DirectoryInfo diretorio = new DirectoryInfo(subdiretorio);
TreeNode tds = td.Nodes.Add(diretorio.Name);
tds.StateImageIndex = 0;
tds.Tag = diretorio.FullName;
CarregaArquivos(subdiretorio, tds);
CarregaSubDiretorios(subdiretorio, tds);
AtualizaProgressBar();
}
}
|
6- Código do método AtualizaProgressBar
Este método atualiza a exibição do controle Progressbar durante a carga dos dados da pasta selecionada:
private void AtualizaProgressBar()
{
if (pgbar1.Value < pgbar1.Maximum)
{
pgbar1.Value++;
int percentual = (int)(((double)pgbar1.Value / (double)pgbar1.Maximum) * 100);
pgbar1.CreateGraphics().DrawString(percentual.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black,
new PointF(pgbar1.Width / 2 - 10, pgbar1.Height / 2 - 7));
Application.DoEvents();
}
}
|
7- Código do evento MouseMove do controle TreeView
Neste código tratamos da exibição da ToolTip conforme a posição do ponteiro do mouse:
private void tvDados_MouseMove(object sender, MouseEventArgs e)
{
// Pega o node na posição do ponteiro do mouse
TreeNode theNode = this.tvDados.GetNodeAt(e.X, e.Y);
// Define uma ToolTip somente se o ponteiro do mouse estive em um node
if (theNode != null && theNode.Tag != null)
{
// Altera a ToolTip somente se o ponteiro do mouse se mover para um novo Node
if (theNode.Tag.ToString() != this.toolTip1.GetToolTip(this.tvDados))
this.toolTip1.SetToolTip(this.tvDados, theNode.Tag.ToString());
}
else // O ponteiro não esta sobre um Node então limpa a ToolTip.
{
this.toolTip1.SetToolTip(this.tvDados, "");
}
}
|
Executando o projeto iremos obter o seguinte resultado:
1- Selecionando uma pasta e carregando os dados da pasta:
2- Exibindo os arquivos e subdiretórios
Pegue o código do projeto aqui : CShp_TreeView.zip
Antes, como ministros
de Deus, tornando-nos recomendáveis em tudo; na muita paciência, nas aflições,
nas necessidades, nas angústias,Como contristados, mas sempre alegres; como
pobres, mas enriquecendo a muitos; como nada tendo, e possuindo tudo.
2
Coríntios 6:4,10
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Exibindo tabelas e registros em um controle TreeView - Macoratti.net
Populando o controle TreeView com tabelas e colunas ... - Macoratti.net