C# - Exibindo imagens de uma pasta

 Neste artigo vou mostrar como podemos exibir todos os arquivos de imagem de uma pasta e suas sub-pastas em um controle DataGridView e permitir que o usuário selecione e exiba uma imagem em outro formulário usando a linguagem C#.


Este é um artigo para iniciantes. Apesar da simplicidade da aplicação ela envolve assuntos importantes como:
  • Usar a classe FolderBrowserDialog

  • Trabalhar com Arrays

  • Configurar o DataGridView

  • Obter um item selecionado do Grid

  • Passar dados para outro formulário via construtor

  • Criar um DataTable em tempo de execução

  • Fechar todos os formulários abertos

Parece pouca coisa, mas para quem esta iniciando agora com C# são conceitos importantes para conhecer e dominar.

Recursos Usados:

Criando o projeto no VS 2017 Community

Abra o Visual Studio Community 2017 e clique em New Project;

Selecione Visual C#, o template Windows Classic Desktope a seguir Windows Forms App(.NET Framework);

A aplicação possui dois formulários :

  1. Form1 - onde iremos exibir os nomes das imagens selecionadas da pasta escolhida;
  2. Form2 - onde iremos exibir a imagem quando o usuário clicar duas vezes na respectiva linha do DataGridView;

A seguir temos o código usado no projeto:

Código do Formulário Form1:

1 - Namespaces usados:

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

2-  Variável fbd1 definida no início do formulário:

FolderBrowserDialog fbd1 = new FolderBrowserDialog();

3- Código do botão de comando - Selecionar Pasta - que usa o FolderBrowserDialog para selecionar uma pasta:

       private void btnSelecionarPasta_Click(object sender, EventArgs e)
        {
            try
            {
                //Define as propriedades do controle FolderBrowserDialog
                fbd1.Description = "Selecione uma pasta exibir as imagens";
                fbd1.RootFolder = Environment.SpecialFolder.Desktop;
                fbd1.ShowNewFolderButton = true;
                //Exibe a caixa de diálogo
                if (fbd1.ShowDialog() == DialogResult.OK)
                {
                    //Exibe a pasta selecionada
                    txtDiretorio.Text = fbd1.SelectedPath;
                }
                ExibeArquivosDaPastaSelecionada(fbd1.SelectedPath);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

4 - Código do método ExibeArquivosDaPastaSelecionada() que vai exibir o nome dos arquivos de imagem usando o métpodo GetArquivosDaPasta() :

       private void ExibeArquivosDaPastaSelecionada(string pasta)
        {
            String pastaOrigem = pasta;
            var filtros = new String[] { "jpg", "jpeg", "png", "gif", "tiff", "bmp" };
            var arquivos = GetArquivosDaPasta(pastaOrigem, filtros, false);
            //Cria um DataTable com os dados dos arquivos
            DataTable tabela = new DataTable();
            tabela.Columns.Add("Nome do Arquivo");
            for (int i = 0; i < arquivos.Length; i++)
            {
                FileInfo arquivo = new FileInfo(arquivos[i]);
                tabela.Rows.Add(arquivo.Name);
            }
             //exibe os dados no datagridview
            dgvDados.DataSource = tabela;
            configuraDataGridView();
        }

5 -  Código do método GetArquivosDaPasta() que define opções para filtrar e fazer a busca nas subpastas da pasta raiz :

        public static String[] GetArquivosDaPasta(String pastaRaiz, String[] filtros, bool isRecursiva)
        {
            List<String> arquivosEncontrados = new List<String>();
            //define as opções para exibir as imagens da pasta raiz
            var opcaoDeBusca = isRecursiva ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
            foreach (var filtro in filtros)
            {
                arquivosEncontrados.AddRange(Directory.GetFiles(pastaRaiz, String.Format("*.{0}", filtro), opcaoDeBusca));
            }
            return arquivosEncontrados.ToArray();
        }

6 - Código para configurar o DataGridView - dgvDados - definido algumas opções :

      private void configuraDataGridView()
        {
            //define o nome, tamanho , inclui colunas e linha no gridview
            dgvDados.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
            dgvDados.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
            dgvDados.CellBorderStyle = DataGridViewCellBorderStyle.Single;
            dgvDados.GridColor = Color.Black;
            dgvDados.RowHeadersVisible = false;
            //define a coluna - Nome do Arquivo, sua largura e font e estilo
            dgvDados.Columns[0].Name = "Nome do Arquivo";
            dgvDados.Columns[0].Width = 500;
            dgvDados.Columns[0].DefaultCellStyle.Font = new Font(this.dgvDados.DefaultCellStyle.Font, FontStyle.Bold);
            dgvDados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvDados.MultiSelect = false;
        }

7 - Código do evento DoubleClick do DataGridView que obtem o caminho da imagem selecionada e passa os dados para uma instância do formulário Form2:

      private void dgvDados_DoubleClick(object sender, EventArgs e)
      {
            try
            {
                string nomeImagem = dgvDados.CurrentRow.Cells[0].Value.ToString();
                string caminhoImagem = fbd1.SelectedPath + "\\" + nomeImagem;
                txtDiretorio.Text = caminhoImagem;
                Form2 frmImagem = new Form2(caminhoImagem);
                frmImagem.Show();
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

8- Código do evento Click do botão - Encerrar - que fecha todas as intâncias de formulários aberto, com exceção do formulário Form1 :

        private void btnEncerrar_Click(object sender, EventArgs e)
        {
            for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
            {
                if (Application.OpenForms[i].Name != "Form1")
                    Application.OpenForms[i].Close();
            }
            this.Close();
        }

Código do Formulário Form2:

1 - Código do construtor do formulário Form2, onde passamos o caminho da imagem e exibimos a imagem no controle Picturebox - picImagem:

using System.Drawing;
using System.Windows.Forms;
namespace CShp_DataGridViewImagens
{
    public partial class Form2 : Form
    {
        public Form2(string caminhoImagem)
        {
            InitializeComponent();
            Image img;
            img = Image.FromFile(caminhoImagem);
            picImagem.Image = img;
        }
    }
}

Executando o projeto iremos obter o seguinte resultado :

Pegue o projeto completo aqui:  CShp_DataGridViewImagens.zip

E agora, filhinhos, permanecei nele(Jesus); para que, quando ele se manifestar, tenhamos confiança, e não sejamos confundidos por ele na sua vinda1 João 2:28

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 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti