c# - 为什么当计时器倒计时时它从不显示秒数?
问题描述
我没有等,但我猜同样的问题是分钟。当计时器倒计时并且秒数为 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'));
}));
}
}
解决方案
尝试使用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);
推荐阅读
- amazon-web-services - 使用 AWS Glue 的 SOAP API 请求
- python - Python Selenium 接收来自渲染器的消息超时:-0.000(为什么)
- python - Python 在现有网页上请求错误 404
- r - 使用 R 从图像中提取特定颜色
- prolog - 如何在没有多余答案/解决方案的情况下紧凑地表达不等式的析取
- java - Eclipse:如何恢复 JavaFX 的模板提案描述
- python - makemigrations 显示未检测到更改
- scala - 如何解决 [错误] 错误选项:'-Ybackend-parallelism'?
- azure-devops - 取回我创建的 DevOps 组织的所有权
- c - C 缓冲区指针