我有一个表格,其中包含一个文本框,显示时间间隔为1秒至2分钟。它工作正常。但是我需要计时器在一轮游戏结束时停止,并在点击另一个表单的按钮时再次启动。所以我在timer_tick事件处理程序中有_timer.Stop()
,在表单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()
的实例,所以在Points表单中我有按钮1,我在它的事件处理程序中除了与计时器无关的其他内容之外:{{1 }}
我从锦标赛课程中获得计时器并重新开始。
我做错了什么?
答案 0 :(得分:2)
我的问题是计时器然后从多长时间开始,直到我按下另一个表格上的按钮,而不是再次从0点开始。
是的,它会 - 当您停止计时器时,您正在重置_myDateTime
:
_timer.Stop();
_myDateTime = DateTime.Now;
您应该将第二行移动到重新启动它的位置。
请注意,您的标题不正确 - 计时器确实 停止了,因为它不会再打勾了。如果你明白我的意思,那么计时器实际上并没有执行计时 - 它只是 一种定期调用事件处理程序的方法。问题出在事件处理程序本身内。
答案 1 :(得分:1)
啊全球的变形,祝福和诅咒在一起。
当您按下按钮时,您是否已将_myDateTime
重置为DateTime.Now?
答案 2 :(得分:0)
当您停止计时器并重新启动计时器时,应将日期时间设置为现在。
_myDateTime = DateTime.Now;