我在C#中有这个#
private void counter_Tick(object sender, EventArgs e)
{
Time.Text = String.Format("{0:000}", Hour) + ":" + String.Format("{0:00}", Minute) + ":" + String.Format("{0:00}", Second);
if (Second != 00)
{
Second = Second - 1;
}
else if (Minute != 00)
{
Minute = Minute - 1;
Second = 59;
}
else if (Hour != 00)
{
Hour = Hour - 1;
Minute = 59;
}
else
{
counter.Stop();
Time.ForeColor = Color.Red;
}
}
哪个有效,但是当它增加到零下一个小时来添加到分钟时,它从00分钟变为58分钟而不是59分钟
EG。
From: 001:00:00
To: 000:58:59
有没有更好的方法让倒计时器在点击000:00:00时做某事???
答案 0 :(得分:10)
好吧,让我们看看时间为10:00:00
时会发生什么。
09:00:00
。09:59:00
。如果您发现时间已经过了一分钟(10:00:00 - 09:59:00 = 00:01:00
)。解决方案是将秒数设置为59。所以现在我们的代码是。
// ...
else if (Hour != 00)
{
Hour = Hour - 1;
Minute = 59;
Second = 59;
}
// ...
答案 1 :(得分:2)
您可以使用标准.Net类来减去时间:
private TimeSpan timeSpan;
private TimeSpan oneSecond = new TimeSpan(0, 0, 1);
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Time.Text = timeSpan.ToString();
if (timeSpan == TimeSpan.Zero)
{
Time.ForeColor = Color.Red;
timer.Stop();
return;
}
timeSpan -= oneSecond;
}
启动计时器时初始化时间跨度(我使用System.Timers.Timer):
timeSpan = new TimeSpan(1, 0, 0);
Timer timer = new Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
答案 2 :(得分:1)
您还需要将Second
设置为59
。否则,一旦计时器再次打勾,它会立即切换到else if (Minute != 00)
并将Minute
(已经是59
)减1。
答案 3 :(得分:0)
DateTime start;
DateTime final;
private void start()
{
start = DateTime.Now;
final = start + TimeSpan.FromHours(1);
}
private void counter_Tick(object sender, EventArgs e)
{
start = DateTime.Now;
Time.Text = (final-start).Hours.ToString() + ":" + (final-start).Minutes.ToString() + ":" + (final-start).Seconds.ToString();
if (final == start)
{
//final code
}
}