为什么当计时器倒计时它从未在秒上显示0?

Ben*_*umi 1 c# winforms

我没等,但我猜测同样的问题是分钟.当计时器倒计时并且秒数变为1时,它会变为59而不是先播种0.我不确定计时器的逻辑,如果在向上/向下计数时它应该显示0.

当它正在计算它的工作正常时,它在59之后显示为0.

private void timer1_Tick(object sender, EventArgs e)
        {
            if (countUpCheckbox.Checked)
            {
                Invoke(new Action(() =>
                {
                    seconds += 1;

                    if (seconds == 60)
                    {
                        seconds = 0;
                        minutes += 1;
                    }

                    if (minutes == 60)
                    {
                        minutes = 0;
                        hours += 1;
                    }

                    richTextBox1.Text = string.Format("{0}:{1}:{2}", hours.ToString().PadLeft(2, '0'), minutes.ToString().PadLeft(2, '0'), seconds.ToString().PadLeft(2, '0'));
                }));
            }

            if (countdownCheckbox.Checked)
            {
                Invoke(new Action(() =>
                {
                    seconds -= 1;

                    if (seconds == 0)
                    {
                        seconds = 59;
                        minutes -= 1;
                    }

                    if (minutes == 0)
                    {
                        minutes = 59;
                        hours -= 1;
                    }

                    richTextBox1.Text = string.Format("{0}:{1}:{2}", hours.ToString().PadLeft(2, '0'), minutes.ToString().PadLeft(2, '0'), seconds.ToString().PadLeft(2, '0'));
                }));
            }
        }
Run Code Online (Sandbox Code Playgroud)

Fra*_*erZ 5

尝试使用TimeSpan,让它计算分钟/秒:

private void timer1_Tick(object sender, EventArgs e)
{
    Invoke(new Action(() =>
    {
        if (countUpCheckbox.Checked)
        {
            timespan += TimeSpan.FromSeconds(1);
        }

        if (countdownCheckbox.Checked)
        {
            timespan -= TimeSpan.FromSeconds(1);
        }
        richTextBox1.Text = string.Format("{0}:{1}:{2}", timespan.Hours.ToString().PadLeft(2, '0'), timespan.Minutes.ToString().PadLeft(2, '0'), timespan.Seconds.ToString().PadLeft(2, '0'));
    }));
}
Run Code Online (Sandbox Code Playgroud)

在您的班级初始化它,如下所示:

private TimeSpan timespan = new TimeSpan(0);
Run Code Online (Sandbox Code Playgroud)