C# - ListView : Galeria de imagens - II


Hoje veremos como criar uma galeria de imagens usando o ListView em uma aplicação Windows Forms e também como excluir a imagem do ListView.

Hoje vamos continuar a explorar a versatilidade do ListView para exibir imagens criando uma galeria de imagens e exibindo e excluindo uma imagem selecionada.

Vamos ao que interessa...

Criando o projeto Windows Forms

Vamos então criar um projeto do tipo Windows Forms App(.NET Framework) no VS 2019 Community no menu File -> New Project, com o nome WF_ListView_Imagens;

No formulário Form1.cs inclua os seguintes controles:

Defina o leiaute do formulário conforme a imagem a seguir:

A seguir vejamos a implementação do código no formulário.

Os namespaces usados no projeto são:

using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

Logo após a declaração do formulário inclua o código abaixo onde criamos os ImageList e definimos a pasta padrão para obter as imagens:

    
      private ImageList ImgList = new ImageList() { ImageSize = new Size(90, 90) };
      private string ImagemFolder = @"C:\Users\user\Pictures\_nasa";

 

No evento Click do botão - Selecionar Pasta de Imagens - inclua o código que permite selecionar uma pasta para obter imagens e exibir no ListView:

       private void BtnSelecionarPasta_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd1 = new FolderBrowserDialog();
            // Define as propriedades do controle FolderBrowserDialog
            fbd1.Description = "Selecione uma pasta das imagens";
            fbd1.RootFolder = Environment.SpecialFolder.MyComputer;
            fbd1.ShowNewFolderButton = true;
            // Exibe a caixa de diálogo
            if (fbd1.ShowDialog(this) == DialogResult.OK)
            {
                // Exibe a pasta selecionada
                ImagemFolder = fbd1.SelectedPath;
            }
            //carrega imagens
            CarregaImagens(ImagemFolder);
        }

 

O método CarregaImagens() recebe a pasta selecionada e exibe as imagens no ListView:

        private void CarregaImagens(string Pasta)
        {
            //define a modo de exibição inical
            lvDados.View = View.LargeIcon;
            lvDados.LargeImageList = ImgList;
            lvDados.MultiSelect = false;
            int quantidadeArquivos = 0;
            string AllowedImageFormats = ".jpg.png.bmp.gif";
            //obtem a quantidade de arquivos da pasta
            quantidadeArquivos = Directory.GetFiles(Pasta).Length;
            //se a quantidade for maior que 100 então emite um aviso
            if (quantidadeArquivos > 100)
            {
                var resultado = MessageBox.Show("
A quantidade de arquivos a exibir pode afetar a memória do sistema. Deseja continuar ?",
                    "Exibir Imagens", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (resultado == DialogResult.No)
                {
                    //restaura pasta padrão
                    ImagemFolder = @"C:\Users\user\Pictures\_nasa";
                    //retorna
                    return;
                }
            }
            //percore as imagens na pasta e cria os Imagelist
            foreach (string fn in Directory.GetFiles(Pasta))
            {
                if (AllowedImageFormats.Contains(Path.GetExtension(fn).ToLower()))
                {
                    string name = System.IO.Path.GetFileName(fn);
                    ImgList.Images.Add(name, Image.FromFile(fn));
                    ListViewItem lvi = lvDados.Items.Add(name, name);
                    lvi.Tag = fn;
                }
            }
        }

No evento ItemSelectionChanged do ListView temos o código que vai exibir a imagem selecionada no controle PictureBox :

       private void LvDados_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            //exibe imagem selecionada no picturebox
            if (e.IsSelected)
                picImagem.Image = Image.FromFile(e.Item.Tag.ToString());
            else
                picImagem.Image = null;
        }

Para concluir no evento Click do botão - Deletar Imagem - temos o código que exclui a imagem do ListView:

        private void BtnDeletar_Click(object sender, EventArgs e)
        {    
            //se selecionou uma imagem deleta a imagem do listView
            if (lvDados.SelectedItems.Count > 0)
            {
                if (picImagem.Image != null)
                    picImagem.Image.Dispose();
                picImagem.Image = null;
                ImgList.Images.RemoveByKey(lvDados.SelectedItems[0].Text);
                lvDados.Items.Remove(lvDados.SelectedItems[0]);
            }
        }

Executando projeto teremos o resultado abaixo:

Pegue o projeto completo aqui :  WF_ListView_Imagens.zip

"Portanto, agora nenhuma condenação há para os que estão em Cristo Jesus, que não andam segundo a carne, mas segundo o Espírito."
Romanos 8:1

Referências:


José Carlos Macoratti