public BaseTimer(TabPage tab, TimerUpdateCallback timerCallback, params Control[] controlsToCopy)
 {
     Tab = tab;
     Tab.SetDrawing(false);
     Tab.RemoveKeyControls();
     TimerCallback  = timerCallback;
     ControlsToCopy = controlsToCopy;
 }
        //################################################################################
        #region Timer Event Handlers

        private void Timer_Update(object sender, TimerUpdateEventArgs args)
        {
            if (InvokeRequired)
            {
                TimerUpdateCallback callback = Timer_Update;
                Invoke(callback, this, args);
            }
            else
            {
                if (args.Overtime.Ticks < 0)
                {
                    ElapsedTime    = args.ElapsedTime;
                    RemainingTime  = args.RemainingTime;
                    TimerText.Text = Formatter.FormatTimeSpan(ModeFunction == FunctionMode.Elapsed ? ElapsedTime : RemainingTime);
                }
                else //overtime block
                {
                    OverTime = args.Overtime;
                    CheckOvertime();
                    TimerText.Text = Formatter.FormatTimeSpan(OverTime);
                }
            }
        }