Visualizzatore di immagini personalizzato

di il
12 risposte

Visualizzatore di immagini personalizzato

Buongiorno a tutti!! Sono nuovo e mi sto approcciando alla programmazione in c#.

Ho deciso di realizzare un visualizzatore di immagini così composto:

  • pulsante per selezionare/caricare una directory (vorrei che aprisse una directory specifica ma al momento non riesco, l'utente vedere solo la cartella principale e sottocartelle ma non deve poter navigare sul pc)
  • una textbox con directory attiva
  • listBox per visualizzare i jpg caricati (devo capire come fare il refresh in automatico ad ogni nuovo caricamento della cartella desiderata, al momento mette in coda tutti i file e l'elenco è infinito)
  • una PictureBox dove visualizzare le immagini
  • pulsanti avanti/indietro/ruota +90/ruota-90

Dopo varie ricerche e prove (tante prove) sono arrivato a “buon punto”, mi manca:

  • il refresh della listbox 
  • directory di “default”
  • azioni dei pulsanti di controllo dell'immagine visualizzate 

Ringrazio in anticipo a chi mi potrà aiutare!!!

Allego il codice generato:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;    // you need to add this Namespace to access FolderBrowser
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PhotoViewer
{
   
   public partial class PhotoViewer : Form
   {
       string currentDir = "";
   public PhotoViewer()
       {
           InitializeComponent();
       }
       private void Form1_Load(object sender, EventArgs e)
       {
       }
       private void buttonDirectory_Click(object sender, EventArgs e)
       {
           try
           {
               var fb = new FolderBrowserDialog();
               if (fb.ShowDialog() == System.Windows.Forms.DialogResult.OK)
               {
                   // get the selected folder by user
                   currentDir = fb.SelectedPath;
                   // display current directory in the text box
                   textBoxDirectory.Text = currentDir;
                   // get all image files from the directory
                   // first create directory info
                   var dirInfo = new DirectoryInfo(currentDir);
                   // get the files
                   var files = dirInfo.GetFiles().Where(c=> (c.Extension.Equals(".jpg") || c.Extension.Equals(".JPG") || c.Extension.Equals(".jpeg")));
                   foreach (var image in files)
                   {
                       // add images (file name) to the list box
                       listBoxImages.Items.Add(image.Name); // we could add full path to the list but it won't look good.
                   }
               }
           }
           catch (Exception ex)
           {
               MessageBox.Show("There was an error : " + ex.Message + " " + ex.Source);
           }
       }
       private void listBoxImages_SelectedIndexChanged(object sender, EventArgs e)
       {
           try
           {
               // get the selected image
               var selectedImage = listBoxImages.SelectedItems[0].ToString();
               if (!string.IsNullOrEmpty(selectedImage) && !string.IsNullOrEmpty(currentDir))
               {
                   // make the full path to the image
                   var fullPath = Path.Combine(currentDir, selectedImage);
                   // set an image from file to the PictureBox
                   pictureBoxImage.Image = Image.FromFile(fullPath);
               }
           }
           catch (Exception)
           {
               throw;
           }
       }
      
       private void buttonFlip_Click(System.Object sender, System.EventArgs e)
       {
       }
       private void buttonBack_Click(object sender, EventArgs e)
       {
       }
       private void buttonNext_Click(object sender, EventArgs e)
       {
       }
   }
}

12 Risposte

  • Re: Visualizzatore di immagini personalizzato

    Intanto questo  è C#, non C/C++, la sezione del forum è un'altra in quanto il linguaggio (e relative librerie) sono diverse.

    Poi non si capisce quale sia il problema di cui vuoi discutere. Qui si danno aiuti specifici su problemi specifici, non si scrivono programmi in gruppo.

  • Re: Visualizzatore di immagini personalizzato

    Grazie per aver risposto e chiedo scusa per la sezione sbagliata…

    La cosa primaria è riuscire a fare il refresh della listbox. 

    Dopo aver caricato la prima cartella di immagini nella listbox, quando decido di caricare una diversa cartella, tutti i file di quest'ultima vengono messi in coda a quelli già presenti. Io non voglio questo, ma voglio solo i file dell'ultima cartella selezionata.

  • Re: Visualizzatore di immagini personalizzato

    Prima di caricare i dati

    listBoxImages.Items.Clear();
  • Re: Visualizzatore di immagini personalizzato

    Grazie per aver risposto e chiedo scusa per la sezione sbagliata…

    La cosa primaria è riuscire a fare il refresh della listbox. 

    Dopo aver caricato la prima cartella di immagini nella listbox, quando decido di caricare una diversa cartella, tutti i file di quest'ultima vengono messi in coda a quelli già presenti. Io non voglio questo, ma voglio solo i file dell'ultima cartella selezionata.

  • Re: Visualizzatore di immagini personalizzato

    Grazie della risposta, ora vedo di integrarlo!!

  • Re: Visualizzatore di immagini personalizzato

    Buongiorno!! Ho seguito le istruzioni e sono riuscito a fare quasi tutto (compresi i pulsanti)…

    Ora vorrei impostare il percorso della directory iniziale (che sia essa in locale o in rete) ed allo stesso tempo che non compaia il percorso completo nella textBoxDirectory (come esempio allegato).

    Potete aiutarmi?

    Grazie!!

  • Re: Visualizzatore di immagini personalizzato

    Se non vuoi che si veda il percorso non mettere quel textbox sul form

  • Re: Visualizzatore di immagini personalizzato

    Il percorso mi serve, però devo vedere solo la parte dalla “cartella” di inizio senza il percorso completo.

    Se per esempio il percorso completo è C:\Users\Utente\Desktop\DOGS\PUPPIES devo visualizzare soltanto \DOGS\PUPPIES…

  • Re: Visualizzatore di immagini personalizzato

    E la parte iniziale del percorso come fai a determinarla? E' fissa? Dove sta?

  • Re: Visualizzatore di immagini personalizzato

    Quello che non riesco a fare è dare una directory di partenza fissa e, successivamente, nasconderne la prima parte…

            private void buttonDirectory_Click(object sender, EventArgs e)
            {
                
                try
                {
                    var fb = new FolderBrowserDialog();
                    
                    if (fb.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    
                    {
    
                        // l'utente seleziona la directory di partenza
                        currentDir = fb.SelectedPath;
    
                        // visualizza la directory attiva nella listBoxImages
                        textBoxDirectory.Text = currentDir;
    
                        // carica tutti i file immagine dalla directory
                        // prima crea le informazioni sulla directory
                        var dirInfo = new DirectoryInfo(currentDir);
    
                        // visualizza i file selezionabili
                        var files = dirInfo.GetFiles().Where(c=> (c.Extension.Equals(".jpg") || c.Extension.Equals(".JPG") || c.Extension.Equals(".jpeg")));
                        foreach (var image in files)
    
                        {
                            // cancella le immagini (nome file) nella listBoxImages (refresh)
                            listBoxImages.Items.Clear();
                        }
    
                        foreach (var image in files)
    
                        {
                            // aggiunge le immagini (nome file) alla listBoxImages
                            // potremmo aggiungere il percorso completo all'elenco ma sarà troppo lungo
                            listBoxImages.Items.Add(image.Name);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("There was an error : " + ex.Message + " " + ex.Source);
                }
    
            }
    
  • Re: Visualizzatore di immagini personalizzato

    Ma il percorso di partenza lo seleziona l'utente SOLO una volta?

    Se è così, salva questo percorso in una variabile solo se questa variabile è vuota.

    Se non lo è non chiedere la cartella e poi visualizzi solo la parte rimanente del percorso completo.

    Ovviamente questo percorso iniziale andrà salvato su DB o in un file di configurazione, altrimenti al riavvio del programma verrà nuovamente chiesto all'utente.

  • Re: Visualizzatore di immagini personalizzato

    La cartella di partenza è bene che sia su un file di configurazione e deve essere un percorso di default, a quel punto l'utente può navigare nelle sotto cartelle (il DB è troppo lontano dalle mie possibilità)…

    grazie delle info, ci provo…

Devi accedere o registrarti per scrivere nel forum
12 risposte