Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    C# e Galleria Immagini

    Ragazzi sono nuovo di questo forum e inizio col dirvi che sto provando a creare un'applicazione in C# con ambiente Visual Studio 2010 un visualizzatore di immagini.Al punto di visualizzare un'immagine per volta ci sono arrivato...ora il mio problema è che non sò che codice implementare da associare ad un eventuale bottone "avanti" che mi permetterà di vedere visualizzare tutte le immagini contenute nella stessa cartella del file selezionato prima...ora vi mostro il mio codice:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace galleria_immagini
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void but_sfoglia_Click(object sender, EventArgs e)
    {
    if (ApriImmagine.ShowDialog() == DialogResult.OK)
    {
    txtNomeFile.Text= ApriImmagine.FileName;
    }
    }

    private void but_visualizza_Click(object sender, EventArgs e)
    {
    pictureBox1.Image = Image.FromFile(txtNomeFile.Text);
    }

    private void checkAdatta_CheckedChanged(object sender, EventArgs e)
    {
    if (checkAdatta.Checked)
    {
    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
    }
    else
    {
    pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
    }
    }

    private void but_avanti_Click(object sender, EventArgs e)
    {

    }
    }
    }
    Quello che vorrei anche sapere è se esiste prp una classe o un metodo che C# mette a disposizione o si deve usare qualche altra strategia?Grazie mille in anticipo:-)

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ciao,
    usa un FolderBrowserDialog per impostare la cartella dalla quale prendi le immagini, una volta impostata, assegni tutti i nomi file di tipo immagine (tramite Directory.GetFiles(cartella)) in una lista di tipo string a livello di classe, quando premi il bottone avanti o indietro assegni il percorso dell'immagine alla picturebox usando come indice per la lista un int che incrementi o decrementi.

    se ti guardi i componenti citati (nel caso non li conosca già) puoi tranquillamente farlo.

    se hai problemi nella stesura del codice, posta ciò che non hai capito con relativo codice implementato.


  3. #3
    Senti scusa di nuovo...Ho provato come mi hai detto ma mi dà problemi il codice...ora te lo mostro:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;

    namespace galleria_immagini
    {
    public partial class Form1 : Form
    {
    public static string targetDirectory;
    string[] immagini = Directory.GetFiles(targetDirectory);

    public Form1()
    {
    InitializeComponent();
    }

    public void but_sfoglia_Click(object sender, EventArgs e)
    {

    if(folderBrowserDialog1.ShowDialog()==DialogResult .OK)
    {
    txtNomeFile.Text = folderBrowserDialog1.SelectedPath;
    targetDirectory = folderBrowserDialog1.SelectedPath;


    }
    /* if (ApriImmagine.ShowDialog() == DialogResult.OK)
    {
    txtNomeFile.Text= ApriImmagine.FileName;
    }*/
    }

    private void but_visualizza_Click(object sender, EventArgs e)
    {
    if (txtNomeFile.Text == "")
    {
    MessageBox.Show("Non hai selezionato il percorso del file immagine da visualizzare!");

    }
    else
    {
    pictureBox1.Image = Image.FromFile(targetDirectory);
    }

    }

    private void checkAdatta_CheckedChanged(object sender, EventArgs e)
    {
    if (checkAdatta.Checked)
    {
    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
    }
    else
    {
    pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
    }
    }

    private void but_avanti_Click(object sender, EventArgs e)
    {

    }
    }
    }
    Mi sono andato a documentare sul Directory.GetFiles() e dato che come argomento ho visto che deve ricevere per logica il percorso della cartella...ho pensato di assegnare il percorso indicato dal tasto "sfoglia" e di assegnarlo poi a una variabile di tipo string che ho chiamato "targetDirectory" e alla fine ho pensato di passare alla pictureBox1,con il pulsante "visualizza",il targetDirectory poichè avevo pensato che mi avrebbe mostrato la prima immagine all'interno della cartella selezionata,ma invece al momento della compilazione il compilatore mi dà errore dicendomi che targetDirectory non può avere un valore null...Mi puoi aiutare?Magari con qualche esempio pratico così capisco meglio...perchè sinceramente non ho capito bene neanche la parte del contatore...Sono un novizio sia della programmazione ad oggetti che di C# :-) Grazie mille per la risposta di prima...e grazie milla per la successiva :-)

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao, partendo dal tuo codice (usa sempre i tag code se no è poco leggibile il codice) :

    codice:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    
    namespace galleria_immagini
    {
     public partial class Form1 : Form
        {
    
            public static string targetDirectory;
            string[] immagini;//<---qui va solo la dichiarazione
            int contatore = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
    
            public void but_sfoglia_Click(object sender, EventArgs e)
            {
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    targetDirectory = folderBrowserDialog1.SelectedPath;
                    immagini = Directory.GetFiles(targetDirectory)
                        .Where(s => s.EndsWith(".png") || s.EndsWith(".jpg") || s.EndsWith(".gif")).ToArray(); //<--qui carichi i path delle immagini (solo quelle...) dando come filtro le estensioni
                }
            }
    
    
            private void but_visualizza_Click(object sender, EventArgs e)
            {
                if (immagini == null)//<---qui controlli se è stato già scelto il percorso
                {
                    MessageBox.Show("Non hai selezionato il percorso del file immagine da visualizzare!");
    
                }
                else
                {
                    if (contatore < 0 || contatore >= immagini.Length) contatore = 0;//<--qui controlli che il contatore non sia fuori range
                    pictureBox1.Image = Image.FromFile(immagini[contatore]);//<--- qui carichi l'immagine (partendo dalla prima)
                }
    
            }
    
            private void checkAdatta_CheckedChanged(object sender, EventArgs e)
            {
                if (checkAdatta.Checked)
                {
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                }
                else
                {
                    pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
                }
            }
    
            private void but_avanti_Click(object sender, EventArgs e)
            {
                if (contatore >= immagini.Length-1) contatore = -1;//<-- se sei arrivato all'ultima immagine riparti dala prima
                pictureBox1.Image = Image.FromFile(immagini[++contatore]);//<--aumenti il contatore
            }
    
            private void but_indietro_Click(object sender, EventArgs e)
            {
                if (contatore < 1) contatore = immagini.Length;//<-- se sei arrivato alla prima immagine riparti dall'ultima
                pictureBox1.Image = Image.FromFile(immagini[--contatore]);//<---dimuinuisci il contatore
            }
        }
    }

  5. #5
    Ehi grazie mille...il tuo aiuto mi è stato molto utile :-) grazie davvero :-) cmq ho apportato alcune modifiche al tuo codice ora te lo ripresento :

  6. #6
    codice:
    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;  namespace galleria_immagini {     public partial class Form1 : Form     {         public static string targetDirectory;         string[] immagini;         int cont=0;                  public Form1()         {             InitializeComponent();         }          public void but_sfoglia_Click(object sender, EventArgs e)         {              if(folderBrowserDialog1.ShowDialog()==DialogResult.OK)             {                 txtNomeFile.Text = folderBrowserDialog1.SelectedPath;                 targetDirectory = folderBrowserDialog1.SelectedPath;                 immagini = Directory.GetFiles(targetDirectory).Where(s => s.EndsWith(".png") || s.EndsWith(".jpg") || s.EndsWith(".gif")).ToArray();              }                          }          private void but_visualizza_Click(object sender, EventArgs e)         {             if (immagini == null)             {                 MessageBox.Show("Non hai selezionato il percorso del file immagine da visualizzare!");             }             else             {                 pictureBox1.Image = Image.FromFile(immagini[cont]);                 if (cont < 0 || cont >= immagini.Length)                 {                     cont =0;                                      }             }                      }          private void checkAdatta_CheckedChanged(object sender, EventArgs e)         {             if (checkAdatta.Checked)             {                 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;             }             else             {                 pictureBox1.SizeMode = PictureBoxSizeMode.Normal;             }         }          private void but_avanti_Click(object sender, EventArgs e)         {             pictureBox1.Image = Image.FromFile(immagini[++cont]);             if (cont >= immagini.Length-1)             {                 cont = -1;             }         }          private void but_indietro_Click(object sender, EventArgs e)         {             pictureBox1.Image = Image.FromFile(immagini[--cont]);             if(cont< 1)             {                 cont = immagini.Length;             }         }     } }

  7. #7
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;

    namespace galleria_immagini
    {
    public partial class Form1 : Form
    {
    public static string targetDirectory;
    string[] immagini;
    int cont=0;

    public Form1()
    {
    InitializeComponent();
    }

    public void but_sfoglia_Click(object sender, EventArgs e)
    {

    if(folderBrowserDialog1.ShowDialog()==DialogResult .OK)
    {
    txtNomeFile.Text = folderBrowserDialog1.SelectedPath;
    targetDirectory = folderBrowserDialog1.SelectedPath;
    immagini = Directory.GetFiles(targetDirectory).Where(s => s.EndsWith(".png") || s.EndsWith(".jpg") || s.EndsWith(".gif")).ToArray();
    }

    }

    private void but_visualizza_Click(object sender, EventArgs e)
    {
    if (immagini == null)
    {
    MessageBox.Show("Non hai selezionato il percorso del file immagine da visualizzare!");
    }
    else
    {
    pictureBox1.Image = Image.FromFile(immagini[cont]);
    if (cont < 0 || cont >= immagini.Length)
    {
    cont =0;

    }
    }

    }

    private void checkAdatta_CheckedChanged(object sender, EventArgs e)
    {
    if (checkAdatta.Checked)
    {
    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
    }
    else
    {
    pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
    }
    }

    private void but_avanti_Click(object sender, EventArgs e)
    {
    pictureBox1.Image = Image.FromFile(immagini[++cont]);
    if (cont >= immagini.Length-1)
    {
    cont = -1;
    }
    }

    private void but_indietro_Click(object sender, EventArgs e)
    {
    pictureBox1.Image = Image.FromFile(immagini[--cont]);
    if(cont< 1)
    {
    cont = immagini.Length;
    }
    }
    }
    }

    In pratica ho messo fuori dall'if tutti i decrementi e gli incrementi del contatore così il programma non è costretto a dover entrare nell'if per poter scorrere le immagini(che avrebbe dato degli errori);Grazie ancora e scs il mio "handicap" del postaggio del codice ma nei forum non sono mai stato cosi attivo :-)

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    veramente il codice era il tuo, io ho solo fatto qualche piccolo ritocchino dove serviva

    mi sembra che comunque abbia capito bene cosa dovevi fare e perchè, giusto?

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da chaw359
    Ehi grazie mille...il tuo aiuto mi è stato molto utile :-) grazie davvero :-) cmq ho apportato alcune modifiche al tuo codice ora te lo ripresento :
    Usa il tag [CODE] per formattare il codice.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Si giusto :-) il problema è che devo entrare nell'ottica dell'"Oggettuale" :-) Se magari hai qualche consiglio lo gradirei davvero tanto :-) Grazie ancora per l'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.