Creare un countdown con C#
Oggi vedremo come creare un piccolo cpuntdown con C# e Windows Form.
Create una nuova applcazione Windows Form.
Nella finestra dovete mettere come minimo questi elementi:
- una TextBox per impostare le ore
- una TextBox per impostare i minuti
- una TextBox per impostare i secondi
- un Button per lo start
- un Button per la pausa
- un Button per lo stop
- una Label per lo scorrere delle ore
- una Label per lo scorrere dei minuti
- una Label per lo scorrere dei secondi
- un oggetto Timer che trovate nel gurppo Componenti; quando lo aggiungete verrà visualizzato nella barra in fondo alla finestra del designer
Inoltre, per fare le cose più carine, i tasti di stop e pausa all'inizio sono disabilitati.
Di volta in volta abiliteremo/disabiliteremo solo i pulsanti che ci servono.
A questo punto nel codice del form pirma di tutto aggiungiamo 4 variabili private:
-
private int seconds = 0;
private int minutes = 0;
private int hours = 0;
private bool paused;
Penso che non abbiano bisogno di molte spiegazioni.
Poi abbiamo bisogni di un metodo per ogni bottone più uno per controllare l'oggetto Timer.
Cominciamo col metodo del pulsante start:
private void btnStart_Click(object sender, EventArgs e)
{
if (paused != true)
{
if (txtHr.Text != String.Empty || txtMn.Text != String.Empty || txtSn.Text != String.Empty)
{
try
{
if (txtHr.Text != String.Empty)
{
hours = Convert.ToInt32(txtHr.Text);
}
if (txtMn.Text != String.Empty)
{
minutes = Convert.ToInt32(txtMn.Text);
}
if (txtSn.Text != String.Empty)
{
seconds = Convert.ToInt32(txtSn.Text);
}
btnStart.Enabled = false;
btnPause.Enabled = true;
btnStop.Enabled = true;
cdTimer.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
MessageBox.Show("Inserire almeno un valore");
}
}
else
{
cdTimer.Enabled = true;
paused = false;
btnStart.Enabled = false;
btnPause.Enabled = true;
btnStop.Enabled = true;
}
}
Prima controlliamo se lo stato del Timer è in pausa.
Poi controlliamo che almeno una delle TextBox sia valorizzata.
Se tutto va bene valoriaziamo le variabili int private con i valori delle TextBox e abilitiamo il Timer (cdTimer).
Il metodo per la pausa invece è questo:
private void btnPause_Click(object sender, EventArgs e)
{
cdTimer.Enabled = false;
paused = true;
btnStart.Enabled = true;
btnPause.Enabled = false;
}
Non c'è moltissimo da spiegare.
Quello per lo stop:
private void btnStop_Click(object sender, EventArgs e)
{
cdTimer.Enabled = false;
btnPause.Enabled = false;
btnStop.Enabled = false;
btnStart.Enabled = true;
txtHr.Clear();
txtMn.Clear();
txtSn.Clear();
lblHr.Text = "00";
lblMin.Text = "00";
lblSec.Text = "00";
}
Anche qua non c'è moltissimo da dire.
Infine vediamo il metodo del Timer:
private void timer1_Tick(object sender, EventArgs e)
{
if (hours == 0 && minutes == 0 && seconds == 0)
{
txtHr.Clear();
txtMn.Clear();
txtSn.Clear();
lblHr.Text = "00";
lblMin.Text = "00";
lblSec.Text = "00";
cdTimer.Enabled = false;
cdTimer.Stop();
cdTimer.Dispose();
MessageBox.Show("Finish!");
btnStart.Enabled = true;
btnPause.Enabled = false;
btnStop.Enabled = false;
}
else
{
if (seconds < 1)
{
seconds = 59;
if (minutes == 0)
{
minutes = 59;
if (hours != 0)
hours -= 1;
}
else
{
minutes -= 1;
}
}
else
{
seconds -= 1;
}
lblHr.Text = hours.ToString();
lblMin.Text = minutes.ToString();
lblSec.Text = seconds.ToString();
}
}
Il tutto è nell'else.
In sostanza c'è un controllo sui secondi, minuti e ore.
Fino a che non sono tutti a zero i valori venogno ridotti.
Più sotto si impostano i valori delle Label.
Diciamo che qua è l'oggetto Timer che pensa a fare i calcoli giusti.
A noi ci viene dato giusto un minimo compito.
c# c# timer textbox label
4 Commenti
mi piacerebbe provare, ma adesso ho installato addirittura la versione 2012 e il .net framework 4.5.<br />quindi purtroppo mi rimane un pò difficile testare le differenze!!
06/12/2012Ciao!<br />No infatti non lo imposti il parametro Interval, quello l'ho fatto io per sistemare il problema.<br />Io uso Microsoft Visual C# 2008, probabilmente in questa versione il valore di default è 100 mentre nella tua è 1000.
06/12/2012ciao!<br />ho dato un'occhiata a quanto scritto (velocemente purtroppo perchè in ufficio non ho molto tempo) e non mi sembra di aver impostato un interval da qualche parte.<br />inoltre a memoria non mi sembra che il contatore soffriva di problemi di sbalzi temporali.<br />tu hai avuto problemi del genere??
04/12/2012Ciao, complimenti per il tuo tutorial.<br />Sono alle prime armi con C# e l'ho trovato utile per cominciare.<br />Volevo solamente farti notare che bisogna impostare il parametro "interval" dell'oggetto "timer" con 1000 millisecondi, altrimenti ogni secondo dura un decimo di secondo!<br />Riguardo questa modifica, dove sarebbe più opportuno inserirla nel codice? Io ho aggiunto la modifica dove viene dichiarato il metodo del timer:<br /><br />this.timer1.Tick += new System.EventHandler(this.timer1_Tick);<br />this.timer1.Interval=1000;
03/12/2012