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.
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.