您好我在C#win form应用程序中重置Timer控件时出现问题。
我正在开发一个简单的倒数计时器。
当我点击start
时,它从59秒开始倒计时。
当我点击Start
按钮时,我需要从头开始重启计时器。
timer1_tick
if (hours==0 && minutes==0 && seconds==0)
{
hours = 0;
minutes = 1;
seconds = 0;
}
else
{
if (seconds < 1)
{
seconds = 59;
if (minutes == 0)
{
minutes = 59;
if (hours != 0)
hours -= 1;
}
else
{
minutes -= 1;
}
}
else
seconds -= 1;
lblTime.Text = hours + @":" + minutes + @":" + seconds;
}
和btnStart_Click
timer1.Enabled = false;
timer1.Enabled = true;
此处我尝试通过启用和停用timer1
来重新启动control
,但它无效。
我也尝试用
timer1.Stop();
timer1.Start();
但它从弯腰的地方再次开始。
我们如何解决这个问题?
答案 0 :(得分:4)
我建议您存储代表目标时间的DateTime
值(当前时间加一分钟):
// or DateTime.Now.AddMinutes(1)
targetTime = DateTime.Now.Add(TimeSpan.FromMinutes(1));
然后在每个计时器嘀嗒声中减去目标时间的当前时间并显示TimeSpan
您将拥有:
var span = targetTime - DateTime.Now;
if (span.TotalSeconds > 0)
lblTime.Text = span.ToString(@"hh\:mm\:ss");
else
lblTime.Text = "Bingo!";
因此,您无需为小时,分钟和秒存储和维护三个变量。
答案 1 :(得分:2)
使用
timer1.Dispose();
timer1 = new System.Windows.Forms.Timer();
摆脱对象并重新初始化。
我希望这会有所帮助。
答案 2 :(得分:2)
在您的btnStart_Click
中,您应该重置实例变量
hours=minutes=seconds=59
答案 3 :(得分:2)
hours
,minutes
和seconds
定义在哪里?
看起来你的btnStart_Click
只需重置这些值而不是重置计时器。
我无法从你的问题中看出这些默认值应该是什么。你说计时器应该从59 秒开始倒计时,但是后来我看到将分钟重置为59的逻辑和其他减少小时的逻辑(尽管小时似乎从0开始并且从不增加)。
答案 4 :(得分:1)
if (timer1.Enabled) { timer1.Enabled = false; }
else { minutes = 1; seconds = 0; timer1.Enabled = true; }
如果您想重置为1分钟,请将其设置为btnStart_Click
功能
注意:对于seconds
当它变为0时,它会再次增加到59,尽管你的minutes
0,你必须验证它
if (minutes == 0 && seconds == 0)
{
timer1.Enabled = false;
//this your code to reset variable hours, minutes, and seconds
}
在函数timer1_tick()