1

我有一个表单,其中包含一个文本框,显示时间间隔为 1 秒,直到 2 分钟。它工作正常。但是,我需要计时器在一轮游戏结束时停止,并在单击另一个表单的按钮时重新开始。所以我_timer.Stop()在 timer_tick 事件处理程序和Form 2_timer.Start()的按钮事件处理程序中。click

我的问题是计时器从经过多少时间开始,直到我按下另一个表单上的按钮,而不是从 0:00 开始。有任何想法吗?

这是有关计时器的代码:

 private DateTime _myDateTime;
 private System.Windows.Forms.Timer _timer;
 private DateTime newDate;

 public Tournament()
 {
     _timer = new System.Windows.Forms.Timer();
     _timer.Interval = 1000;
     _timer.Tick += Timer_Tick;
     _myDateTime = DateTime.Now;

     newDate = new DateTime();
     newDate = newDate.AddMinutes(2.00);
     _timer.Start();
     InitializeComponent();
 }

 void Timer_Tick(object sender, EventArgs e)
 {
        var diff = DateTime.Now.Subtract(_myDateTime);
        this.textBox1.Text = diff.ToString(@"mm\:ss");

        DateTime dt = Convert.ToDateTime(diff.ToString());

        if (newDate.Minute == dt.Minute)
        {
           _timer.Stop();
           _myDateTime = DateTime.Now;

           displayPointsOrResults();

           this.textBox1.Text = diff.ToString(@"mm\:ss");  
        }
  }

displayPointsOrResults()我创建另一个表单的实例中,Points()所以在点表单中我有按钮 1,我在它的事件处理程序中有这个,除了与计时器无关的其他事情: tournament.Timer1.Start();

我从锦标赛课程中获取计时器并重新开始的地方。

我究竟做错了什么?

4

3 回答 3

2

我的问题是计时器从经过多少时间开始,直到我按下另一个表单上的按钮,而不是从 0:00 开始。

是的,它会 -_myDateTime当你停止计时器时你正在重置:

_timer.Stop();
_myDateTime = DateTime.Now;

您应该将第二行移到重新启动它的位置。

请注意,您的标题不正确-计时器确实停止,因为它不再滴答作响。如果您明白我的意思,计时器实际上并没有执行计时 - 它只是定期调用事件处理程序的一种方式。问题在于事件处理程序本身。

于 2012-12-07T11:14:19.730 回答
1

啊全球vars,祝福和诅咒在一起。当您按下按钮时,您
是否已将 DateTime.Now 重置为?_myDateTime

于 2012-12-07T11:15:01.087 回答
0

当您停止计时器并重新启动它时,应将日期时间设置为现在。

_myDateTime = DateTime.Now;
于 2012-12-07T11:16:58.787 回答