Creating a Digital Clock in .NET

Time: For some, there is enough time. For others, like me, there will never be enough time to accomplish everything and to do everything I’d like to do. I can do with a 30 hour day. Let me explain an ordinary day in the life of Hannes: I wake up at 4 AM. In the winters, this proves quite difficult! Wife and daughter go to the gym at 4:30 AM. I do some chores an around the house. At 6 AM, I start my commute to work, which is 60 KM (37 miles) away. Now, this doesn’t sound too bad—until you hit Johannesburg traffic!

Like Forest Gump used to say: “Life is like a box of chocolates, because you never know what you’re going to get.” This is Johannesburg traffic. Some mornings, the commute can take you an hour (I do not have a flashy car, because I don’t need a flashy car—I need a car that can take me from point A to point B—I do not need to show off anything), or the commute can take you 3 to 4 hours. Seriously.

I start working at 8, but I prefer being at the office at 7. This gives me enough time to have a second breakfast (I have a very fast metabolism…), coffee and a smoke, and time to get my thoughts for the day in order. I work until 5 PM. Then, the commute back. The afternoons are not too bad, unless there are major issues like a flood, or highway speed chase, or protest actions.

Then, I am home, watch a bit of TV and fall asleep in front of the TV. I suppose it is due to the fact that I am getting older… When I do not fall asleep early, I write articles such as this one. Weekends are too short. When I do not have to go to my chiropractor, I help out at a local college. Once that is done, I am home and can finally spend time with my family.

Every now and then, I go camping or exploring my beautiful country on weekends, but then time is way too short! So, as you can see, having 30 hour days can help me get some sleep. I average about four hours of sleep daily.

All of this got me thinking of an idea for an article, this one. Today, I will show you how quick and easy it is to create a digital clock in VB.NET and in C#. A few years ago, I wrote an article on how to create an analog clock; feel free to read it here.

Our Project

Open Visual Studio and create a Windows Forms project. Once the form has loaded, design it as shown in Figure 1. Make sure to include 8 Pictureboxes (these will hold the digits), an ImageList, and a Timer.

Figure 1: Design

I cannot draw. At all. You will see proof of this fact a bit later. Create images for the digits, from 0 to 9, and include a colon. These images will be used to display the time, so if you are blessed enough to be able to draw, draw nice digits, or download a font that looks funky and use it. Once you have your pictures, add them all to the ImageList.

ImageList Images
Figure 2: ImageList Images

Make sure your Timer’s Enabled Property is set to True in Design Time.


Let’s get cracking!

Add the following Function that will return the appropriate image to the timer.


      private Image Index(string strNum)
         return ImageList2.Images[Convert.ToInt32(strNum)];


   Private Function Index(ByVal strNum As String) As Image
      Return ImageList2.Images(Convert.ToInt32(strNum))
   End Function

Add the Form_Load event.


      private void Form1_Load(object sender, EventArgs e)
         Timer1.Interval = 1;
         Timer1.Enabled = true;
         PictureBox3.Image = ImageList2.Images[10];
         PictureBox6.Image = ImageList2.Images[10];


   Private Sub Form1_Load(ByVal sender As Object, _
         ByVal e As EventArgs)
      Timer1.Interval = 1
      Timer1.Enabled = True
      PictureBox3.Image = ImageList2.Images(10)
      PictureBox6.Image = ImageList2.Images(10)
   End Sub

The Form_Load event initializes the Timer and sets PictureBox3’s Image to the Colon. This will act as a separator for hours, minutes, and seconds.

Add the Timer_Tick event.


      private void Timer1_Tick(object sender, EventArgs e)
         string strDateTime = DateTime.Now.ToString();
         int strDelimiter = strDateTime.IndexOf(" ");
         string strTime = strDateTime.Substring(strDelimiter + 1,
            strDateTime.Length - strDelimiter - 1);
         PictureBox1.Image = Index(strTime[0].ToString());
         PictureBox2.Image = Index(strTime[1].ToString());
         PictureBox4.Image = Index(strTime[3].ToString());
         PictureBox5.Image = Index(strTime[4].ToString());
         PictureBox7.Image = Index(strTime[6].ToString());
         PictureBox8.Image = Index(strTime[7].ToString());


   Private Sub Timer1_Tick(sender As Object, e As EventArgs) _
         Handles Timer1.Tick
      Dim strDateTime As String = DateTime.Now.ToString()
      Dim strDelimiter As Integer = strDateTime.IndexOf(" ")
      Dim strTime As String = strDateTime.Substring(strDelimiter _
         + 1, strDateTime.Length - strDelimiter - 1)
      PictureBox1.Image = Index(strTime(0).ToString())
      PictureBox2.Image = Index(strTime(1).ToString())
      PictureBox4.Image = Index(strTime(3).ToString())
      PictureBox5.Image = Index(strTime(4).ToString())
      PictureBox7.Image = Index(strTime(6).ToString())
      PictureBox8.Image = Index(strTime(7).ToString())
   End Sub

When run, your project will look similar to Figure 3.

Figure 3: Running


A famous quote goes: “Time Is What Prevents Everything From Happening At Once.” I hope you have enjoyed today’s article. Until next time, happy coding!

Hannes DuPreez
Ockert J. du Preez is a passionate coder and always willing to learn. He has written hundreds of developer articles over the years detailing his programming quests and adventures. He has written the following books: Visual Studio 2019 In-Depth (BpB Publications) JavaScript for Gurus (BpB Publications) He was the Technical Editor for Professional C++, 5th Edition (Wiley) He was a Microsoft Most Valuable Professional for .NET (2008–2017).

More by Author

Must Read