Click here to Skip to main content
15,885,537 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a function that starts at 8am and ends at 8:45 am. That function displays the remaining time when we are in that time period. How could I display the progress in the progress bar?

Here is what I have so far:

private void timerPeriods_Tick(object sender, EventArgs e)
  {

      DateTime date_time_now = DateTime.Now;

      //Period 1 8:00 - 8:45AM
      DateTime date_time_Period1End = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 08, 45, 0);
      //Remaining time to end of period 1
      TimeSpan time_span = date_time_Period1End - date_time_now;

      //conditions
      if (date_time_Period1End > date_time_now)
      {
         //Progress bar ?

          string time = string.Format("{0:00}:{1:00}:{2:00}", time_span.Hours, time_span.Minutes, time_span.Seconds);

          lblP1CountDown.Text = "Left: "  + time;


      }
      else
      {
          lblP1CountDown.Text = "Done";

      }
Posted
Updated 22-Apr-14 8:58am
v7

1 solution

Assuming that your timer is System.Windows.Forms.Timer ;

C#
var timerPeriods = new Timer();
timerPeriods.Interval = 1000;
timerPeriods.Tick += timerPeriods_Tick;
timerPeriods.Start();
progressBar1.Maximum = 2700; // for 45 min


C#
void timerPeriods_Tick(object sender, EventArgs e)
{
    var curTime = DateTime.Now.TimeOfDay;
    var refTime1 = new TimeSpan(8, 0, 0);
    var refTime2 = new TimeSpan(8, 45, 0);


    if (curTime >= refTime1 && curTime <= refTime2)
    {
        var tsleft = refTime2.Subtract(curTime);
        lblP1CountDown.Text = tsleft.ToString(@"hh\:mm\:ss");
        progressBar1.Value++;

    }
    else
    {
        lblP1CountDown.Text = "Done";
        (sender as Timer).Stop();
    }
}



More generic way, if you start timer between time period not before refTime1 ;

C#
var timerPeriods = new Timer();
timerPeriods.Interval = 1000;
timerPeriods.Tick += timerPeriods_Tick;
timerPeriods.Start();
progressBar1.Maximum = 100;


C#
void timerPeriods_Tick(object sender, EventArgs e)
{
    var curTime = DateTime.Now.TimeOfDay;
    var refTime1 = new TimeSpan(8, 0, 0);
    var refTime2 = new TimeSpan(8, 45, 0);


    if (curTime >= refTime1 && curTime <= refTime2)
    {
        var tsleft = refTime2.Subtract(curTime);
        lblP1CountDown.Text = tsleft.ToString(@"hh\:mm\:ss");
        progressBar1.Value = 100 - (int)( tsleft.TotalSeconds * 100 /refTime2.Subtract(refTime1).TotalSeconds);
    }
    else
    {
        lblP1CountDown.Text = "Done";
        (sender as Timer).Stop();
    }
}
 
Share this answer
 
v6
Comments
fatihkaratay 22-Apr-14 16:13pm    
The second option will feet my needs however, whenever I run the code, the progress bar doesn't go left to write. In this case it goes right to left.
Emre Ataseven 22-Apr-14 16:20pm    
progressBar1.Value = 100 - ...

If you type "100 -" front of calculation, it goes from left to right.
fatihkaratay 22-Apr-14 16:26pm    
Great!. Thank you for the help!
Emre Ataseven 22-Apr-14 16:41pm    
You're welcome!

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900