首页 > 解决方案 > 为什么当计时器倒计时时它从不显示秒数?

问题描述

我没有等,但我猜同样的问题是分钟。当计时器倒计时并且秒数为 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'));
                }));
            }
        }

标签: c#winforms

解决方案


尝试使用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'));
    }));
}

在你的类中初始化它,如下所示:

private TimeSpan timespan = new TimeSpan(0);

推荐阅读