Search code examples
c#datetimetimerincrementdecrement

Increment / Decrement Time


Greetings I'm facing some issues while trying to make a simple event scheduler. In the code bellow my intention is to Increase or Decrease Time (when a button is pressed using mouse events).

However after many attempts I can't figure out why I can Increase; but not Decrease time.

    // Timer
    private Timer TmrCount;

    private int HH {get;set;}
    private int MM { get; set; }

    private Button CurrBtn = new Button();

    #region <Mouse Events>
    private void OnMouseDown(object sender, EventArgs e)
    {
        CurrBtn = (Button)sender;

        StartTimer();
    }

    private void OnMouseUp(object sender, MouseEventArgs e)
    {
        StopTimer();
    }
    #endregion

    #region <Timer>
    private void StartTimer()
    {
        if (TmrCount == null)
        {
            TmrCount = new Timer();
            TmrCount.Interval = 210;
            TmrCount.Tick += TmrCount_Tick;
            TmrCount.Start();
        }
    }

    private void TmrCount_Tick(object sender, EventArgs e)
    {
        Set_Time();
    }

    private void StopTimer()
    {
        if (TmrCount != null)
        {
            TmrCount.Stop();
            TmrCount.Dispose();
            TmrCount.Tick -= TmrCount_Tick;
            TmrCount = null;
        }
    }

    private void Set_Time()
    {
        switch (CurrBtn.Text)
        {
            case "+":
                // Condition Check (Increase HH))
                //if (HH == 23) { HH = default(int); }

                //Increase HH
                //if (HH < 23) { HH += 1; }

                while (HH < 23) { HH++; break; }
                break;

            case "-":
                // Condition Check (Decrease HH)
                //if (HH == default(int)) { HH = 23; }
                //if (HH == 0) { HH = 23; }

                // Decrease HH
                while (HH > 23) { HH-=1; break; }
                break;
        }

        // Set Hour Text into Label
        lbl_HH.Text = Convert.ToString(HH);
    }
    #endregion

Can anyone point me the right direction? Thanks in advance


Solution

  • Supposing that your HH variable start with a value of 1 then you should change your SetTime in this way

    int HH = 1;
    
    private void Set_Time()
    {
        switch (CurrBtn.Text)
        {
            case "+":
                // Condition Check (Increase HH))
                // Within a limit of 23
                while (HH < 23) { HH++; break; }
                break;
    
            case "-":
                // Condition Check (Decrease HH)
                // Decrease HH but don't allow it to be less than 0 
                while (HH >= 0) { HH-=1; break; }
                break;
        }
    
        // Set Hour Text into Label
        lbl_HH.Text = Convert.ToString(HH);
    }
    

    By the way, after you dispose an object you should never try to access it even to remove an event handler.

    private void StopTimer()
    {
        if (TmrCount != null)
        {
            TmrCount.Stop();
            TmrCount.Tick -= TmrCount_Tick;
            TmrCount.Dispose();
            TmrCount = null;
        }
    }