In questo articolo vedremo come creare, utilizzando l’ultima versione di .NET, attualmente la 10, una galleria fotografica in ambiente Windows Forms.
Il progetto illustra una tecnica per realizzare una galleria fotografica in grado di visualizzare diverse immagini, trasformando l'applicazione in una sorta di cornice fotografica digitale.
Il tutto verrà realizzato senza utilizzare librerie di terze parti, ricorrendo esclusivamente alle funzionalità messe a disposizione da .NET e Windows Forms, come mostrato nell'esempio seguente.

Per prima cosa, creiamo una cartella, chiamata ad esempio "galleria", nella quale inseriamo 10 o più immagini in formato JPG.
Creazione del progetto
Creiamo un nuovo progetto di tipo Windows Forms, selezionando "App Windows Forms" e utilizzando l'ultima versione di .NET disponibile. Al momento della stesura dell'articolo, la versione corrente è .NET 10.
Dopo aver creato il progetto, aggiungiamo alla form i seguenti controlli:
- un controllo PictureBox, che possiamo ingrandire in modo da occupare buona parte della form. Impostiamo la proprietà Name su pcbGalleria e la proprietà SizeMode su Zoom;
- un controllo Label, con la proprietà Text impostata su Percorso della cartella delle immagini;
- un controllo TextBox, con la proprietà Name impostata su TxtPercorsoImmagini e la proprietà ReadOnly impostata su true;
- un controllo NumericUpDown, con la proprietà Name impostata su nudSecondi, la proprietà Increment impostata su 1000, la proprietà Maximum impostata su 10000 e la proprietà Minimum impostata su 1000;
- un controllo Button, posizionato accanto alla casella di testo, con la proprietà Text impostata su ... e la proprietà Name impostata su BtnPercorsoImmagini;
- un secondo controllo Button, posizionato sotto la casella di testo, con la proprietà Text impostata su Avvia e la proprietà Name impostata su BtnAvvia;
infine, un controllo Timer.
Il risultato dovrebbe essere simile a quello mostrato nella Figura 1.

Figura 1 – La form con i vari controlli
A questo punto la nostra form è stata creata. Non ci resta che scrivere il codice necessario per realizzare la galleria fotografica.
Stesura del codice
Facciamo doppio clic sul pulsante "BtnTrovaCartella" per aprire la visualizzazione del codice e generare automaticamente il gestore dell'evento Click del pulsante.
Di seguito riportiamo il frammento di codice che permette di selezionare una cartella presente sul proprio PC.
C#
private void BtnTrovaCartella_Click(object sender, EventArgs e)
{
try
{
using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
{
folderBrowserDialog.Description = "Seleziona la cartella dove si trovano i file Immagine";
folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
// Imposto il percorso selezionato nella casella di testo
TxtPercorsoImmagini.Text = folderBrowserDialog.SelectedPath;
}
}
}
catch (Exception)
{
throw;
}
}
Sempre all'interno della form, aggiungiamo due variabili: un array di tipo string, che conterrà i percorsi dei file immagine da visualizzare, e una variabile di tipo int, che verrà utilizzata per memorizzare l'indice del file attualmente visualizzato.
Inseriamo le seguenti dichiarazioni all'interno della classe della form, subito dopo la dichiarazione della classe:
C#
private string[] imgFiles;
private int indiceCorrente = 0;
Sempre all'interno della form, scriviamo una funzione che individua, nella cartella selezionata, tutti i file immagine e ne memorizza i percorsi nell'array imgFiles.
Di seguito il codice della funzione.
C#
private void LoadImagesDaCartella(string cartella)
{
try
{
// Filtra solo formati immagine comuni
imgFiles = Directory.GetFiles(cartella)
.Where(file =>
file.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
file.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase) ||
file.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
file.EndsWith(".bmp", StringComparison.OrdinalIgnoreCase) ||
file.EndsWith(".gif", StringComparison.OrdinalIgnoreCase)
)
.ToArray();
}
catch (Exception ex)
{
MessageBox.Show($"Errore nel caricamento immagini: {ex.Message}", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
imgFiles = Array.Empty<string>();
}
}
Passiamo nuovamente alla visualizzazione grafica e facciamo doppio clic sul controllo Timer, in modo da aprire il gestore dell'evento Tick.
All'interno di questo evento gestiamo la visualizzazione delle immagini utilizzando la variabile indiceCorrente, che indica l'elemento corrente dell'array imgFiles.
In questo modo, allo scadere dell'intervallo impostato nel Timer, viene visualizzata nel controllo PictureBox l'immagine successiva. Una volta raggiunta l'ultima immagine, la visualizzazione riparte dalla prima.
Di seguito riportiamo il frammento di codice relativo a queste operazioni.
C#
private void timer1_Tick(object sender, EventArgs e)
{
try
{
indiceCorrente = (indiceCorrente + 1) % imgFiles.Length;
pcbGalleria.Image?.Dispose();
pcbGalleria.Image = Image.FromFile(imgFiles[indiceCorrente]);
}
catch (Exception ex)
{
timer1.Stop();
MessageBox.Show($"Errore durante il caricamento dell'immagine: {ex.Message}", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Passiamo nuovamente alla visualizzazione grafica e facciamo doppio clic sul pulsante BtnAvvia, in modo da aprire la visualizzazione del codice relativo all'evento Click del pulsante.
All'interno di questo evento impostiamo l'intervallo del controllo Timer e richiamiamo la funzione che individua i file immagine presenti nella cartella selezionata, memorizzandone i percorsi nell'array imgFiles.
Se vengono trovate una o più immagini, avviamo il Timer e la galleria può iniziare a visualizzare le immagini.
Di seguito riportiamo il codice relativo a queste operazioni.
C#
private void BtnAvvia_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(TxtPercorsoImmagini.Text))
{
MessageBox.Show(
"Seleziona un percorso dove sono presenti le immagini.",
"Gallery",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
return;
}
LoadImagesDaCartella(TxtPercorsoImmagini.Text);
if (imgFiles.Length > 0)
{
indiceCorrente = 0;
pcbGalleria.Image?.Dispose();
pcbGalleria.Image = Image.FromFile(imgFiles[indiceCorrente]);
timer1.Interval = (int)nudSecondi.Value;
timer1.Start();
}
else
{
MessageBox.Show(
"Nessuna immagine trovata nella cartella selezionata.",
"Errore",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
}
Il risultato finale sarà simile a quello mostrato nell'immagine seguente.

Figura 2 – Il risultato della galleria
Conclusioni
In questo articolo abbiamo visto come creare una semplice cornice digitale utilizzando .NET e Windows Forms.
Con poche righe di codice possiamo trasformare il nostro PC o un monitor in una cornice fotografica digitale, in grado di visualizzare automaticamente le nostre immagini.
Possiamo così utilizzare il progetto per mostrare le fotografie delle vacanze appena trascorse, dei momenti più belli trascorsi con le persone care oppure semplicemente quelle immagini che vogliamo tenere sempre a portata di vista.