Press "Enter" to skip to content

Usare le differenze fra Date per un countdown di fine anno

Una minuscola applicazione ispirata da una richiesta di Stefano Pranzo, per creare un applicazione che visualizza il conto alla rovescia per la fine dell’anno.

countdown_01[4]

Il risultato finale è questo, per ottenerlo creiamo una nuova applicazione Windows Forms, Rinominiamo Form1 FrmCountDown, e cambiamo le seguenti property:

  • BackgroundImage -> Scegliamo una immagine cliccando sul bottone con i 3 puntini ed importiamola nelle resources di programma, quella che vedete l’ho trovata su bing digitando newyear nella ricerca immagini.
  • BackgroundImageLayout -> Stretch
  • FormBorderStyle -> None
  • KeyPreview -> True (questa ci serve per gestire il quit).

Aggiungiamo alla form una label che chiamiamo lblCountdown e a cui diamo le seguenti proprietà:

  • BackColor -> transparent
  • Font Name -> Lucida Calligraphy
  • Font Size -> 64
  • Forecolor -> Gold
  • TextAlign -> MiddleCenter

Aggiungiamo alla form un button che chiamiamo btnClose e a cui diamo le seguenti proprietà:

  • UseVisualStyleBackColor -> False
  • FlatStyle -> Flat
  • BackColor -> transparent
  • Font Name -> Lucida Calligraphy
  • Forecolor -> Gold
  • Text -> Close

Aggiungiamo alla form un timer che chiamiamo tmrCountdown.

Implementiamo il codice dietro alla form:

public FrmCountdown()
{
	InitializeComponent();
	tmrCountdown.Interval = 1000;
	tmrCountdown.Enabled = false;
}

Nel costruttore settiamo l’intervallo del timer a 1 secondo (1000 millisecondi) e lo disattiviamo.

private void FrmCountdown_Load(object sender, EventArgs e)
{
	tmrCountdown.Start();
}

Sull’evento Load della form attiviamo il timer.

private void btnClose_Click(object sender, EventArgs e)
{
	Application.Exit();
}

Sull’evento click del bottone Close implementiamo la chiusura applicazione.

private void FrmCountdown_KeyUp(object sender, KeyEventArgs e)
{
	if (e.KeyCode == Keys.Escape)
	{
		Application.Exit();
	}
}

Sulla  pressione del tasto Esc della tastiera facciamo lo stesso.

DateTime mDtEnd = new DateTime((DateTime.Now.Year+1), 01, 01, 0, 0, 0);

Creiamo una variabile a livello di form che contiene la data finale del conto alla rovescia, quindi le 00:00:00 del primo gennaio dell’anno prossimo.

private void tmrCountdown_Tick(object sender, EventArgs e)
{
	TimeSpan sp = mDtEnd.Subtract(DateTime.Now);
	this.lblCountDown.Text = sp.TotalHours.ToString("###") + ":" +
		sp.Minutes.ToString("0#") + ":" + sp.Seconds.ToString("0#");
	Application.DoEvents();
 
}

Infine, sull’evento Tick del timer andiamo ad aggiornare la nostra label  facendo una differenza fra la data attuale e la data finale e convertendo il dato in una stringa formattata. Come potete vedere abbiamo usato il metodo Subtract della classe DateTime e le property TotalHours, Minutes e Seconds del Timespan che rappresenta la differenza.

Ed il nostro countdown di fine anno è pronto.

Il progetto esempio è disponibile al link seguente:

Per qualsiasi domanda, osservazione, commento, approfondimento, o per segnalare un errore, potete usare il link alla form di contatto in cima alla pagina.

ADDENDUM 08/02/2017

Il progetto esempio è stato ricostruito dopo il trasferimento al nuovo blog, pertanto la nuova versione è stata aggiornata al framework .net 4.5.2.