Search form

C#.NET: Countdown Timer

This is a simple Windows Forms countdown timer I created a few years back. I'd start something in the kitchen, get distracted on the computer, and then burn whatever I was cooking, so I built this to warn myself.

Countdown Timer

The program takes user input into a masked textbox, uses the Systems.Windows.Forms.Timer class to count down while displaying the remaining time, and then beeps at you when it reaches 00:00. It still works in Windows 7 x64 using the .NET 4.6 framework.

The following code would go in Form1.cs or equivalent. Designer.cs and Program.cs were left untouched (by me) in this case. The only other relevant setting not shown here is timer1.Interval = 1000 (set in the form designer), which defines the frequency of elapsed timer events (like the tick) in milliseconds.

using System;
using System.Windows.Forms;
using System.Media;

namespace CountdownTimer
{
    public partial class FrmTimer : Form
    {
        private int timeLeft;
                
        public FrmTimer()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            if (txtTimer.Text == "00:00")
            { 
                MessageBox.Show("Please enter the time to start!", "Enter the Time", MessageBoxButtons.OK);
            } 
            else 
            {
                // Convert text to seconds as int for timer
                string[] totalSeconds = txtTimer.Text.Split(':');
                int minutes = Convert.ToInt32(totalSeconds[0]);
                int seconds = Convert.ToInt32(totalSeconds[1]);
                timeLeft = (minutes*60) + seconds;

                // Lock Start and Clear buttons and text box
                btnStart.Enabled = false;
                btnClear.Enabled = false;
                txtTimer.ReadOnly = true;

                // Define Tick eventhandler and start timer
                timer1.Tick += new EventHandler(timer1_Tick);
                timer1.Start();
            }
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            timeLeft = 0;
            btnStart.Enabled = true;
            btnClear.Enabled = true;
            txtTimer.ReadOnly = false;
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtTimer.Text = "00:00";
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (timeLeft > 0)
            {
                timeLeft = timeLeft - 1;
                // Display time remaining as mm:ss
                var timespan = TimeSpan.FromSeconds(timeLeft);
                txtTimer.Text = timespan.ToString(@"mm\:ss");
                // Alternate method
                //int secondsLeft = timeLeft % 60;
                //int minutesLeft = timeLeft / 60;
            }
            else
            {
                timer1.Stop();
                SystemSounds.Exclamation.Play();
                MessageBox.Show("Time's up!", "Time has elapsed", MessageBoxButtons.OK);
            }
        }
    }
}

Categories: