c# winform timer计时器停止并重置计时器

lemontea199 2012-10-03 11:19:41

最近在做一个倒计时的计时器,是用timer控件进行控制的。倒计时的部分是没有问题的,但是现在需要实现点击btn后,停止当前的计时,并且重置计时器为计时的初始状态这项功能。详见代码。


private void btn_end_Click(object sender, EventArgs e)
{
timer1.Stop();
timer1.Enabled = false;
timer1.Dispose();
}

long sec = 1800;
private void timer1_Tick(object sender, EventArgs e)
{

sec -= 1;
this.lb_time.Text= new DateTime(sec * 1000000).ToLongTimeString();
if (sec == 300 )
{

this.lb_zff.Text = "最后30秒!";


this.axWindowsMediaPlayer1.URL = "D:\\ding.wav";
}

if (sec == 0)
{
timer1.Stop();
this.lb_zff.Text = "时间到!";
this.axWindowsMediaPlayer1.URL= "D:\\ling.wav";

}

private void btn_start_Click(object sender, EventArgs e)
{
if (timer1.Enabled)
{
timer1.Stop();

}
else
{
timer1.Start();
}
}


现在的情况是触发btn_end_Click后计时停止,未重置计时器,触发btn_start_Click后,计时继续。所以想请教如何才能终止计时并重置计时器
...全文
7365 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuehua875 2014-07-18
  • 打赏
  • 举报
回复
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace add { public partial class Form1 : Form { double time = 1; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { timer1.Start(); time = 1; } private void timer1_Tick(object sender, EventArgs e) { if (time <= 60) this.textBox1.Text = time++.ToString(); else time = 1; } private void button2_Click_1(object sender, EventArgs e) { timer1.Stop(); } } } 希望可以有所帮助!
渃水 2013-02-18
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
这是一个业务逻辑设计问题。 不要定义C# code?1long sec = 1800;你应该基于一个绝对时间来设计,而不是sec。
什么意思?能具体一点吗?谢谢
渃水 2013-02-18
  • 打赏
  • 举报
回复
timer1.Enabled = false 之后,下次开始好像还是从上次停止处开始计时
渃水 2013-02-18
  • 打赏
  • 举报
回复
同问,如何重置计时器!
chentao01194691 2013-01-09
  • 打赏
  • 举报
回复
点击停止按钮 timer1.Enabled = false;就可以了啊
smartbarry 2012-10-14
  • 打赏
  • 举报
回复
我也在想这个问题,我的想法是写一个函数将label重置,但问题是当我再点击开始按钮以后,它又从刚才停止的地方开始了,求解
lemontea199 2012-10-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

这是一个业务逻辑设计问题。

不要定义C# code
long sec = 1800;

你应该基于一个绝对时间来设计,而不是sec。
[/Quote]

不是很明白,能解释一下吗?
  • 打赏
  • 举报
回复
这是一个业务逻辑设计问题。

不要定义
long sec = 1800;
你应该基于一个绝对时间来设计,而不是sec。
cornertree 2012-10-03
  • 打赏
  • 举报
回复
private void btnStar_Click(object sender, EventArgs e)
{
if (timer1.Enabled)
{
timer1.Stop();

}
else
{
sec = 1800; timer1.Start();
}

}
lemontea199 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
不要使用timer1.Dispose();
private void btn_end_Click(object sender, EventArgs e)
{
timer1.Stop();
timer1.Enabled = false;
sec = 1800;
}

……
[/Quote]



这样的话,也还只是暂停了计时。没有重置计时器
threenewbee 2012-10-03
  • 打赏
  • 举报
回复
不要使用timer1.Dispose();
private void btn_end_Click(object sender, EventArgs e)
{
timer1.Stop();
timer1.Enabled = false;
sec = 1800;
}

111,089

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧