2016-02-29 170 views
0

我有这样的代码:如何重新启动计时器?

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if(e.KeyData == Keys.Left) 
    { 
     left = true; 
     right = false; 
     down = false; 
    } 
} 

private void timerMoving_Tick(object sender, EventArgs e) 
{ 
    if(Ghost.Bounds.IntersectsWith(panel3.Bounds)) 
    { 
     timerMoving.Stop(); 
    } 

    if(left) 
    { 
     Ghost.Left -= 5; 
     timerMoving.Start(); 
    } 
} 

在上面的代码为我的幽灵(它是向下移动)射门击中·Panel3中边界停止。 我希望我的计时器再次启动,因为我按了左,右或上键,只有当它向下移动时才停下来,碰到面板3。我试过这样做:

if(left) 
{ 
    Ghost.Left -= 5; 
    timerMoving.Start(); 
} 

但没有任何反应,为什么?

+2

您不能在tick事件中启动计时器。 – LarsTech

+4

因为这段代码在你的定时器Tick事件中并且你停止了它,所以它永远不会再执行...... – Gusman

+0

那么我该怎么做呢?我想重新启动计时器。 – zubaida12

回答

0

简单的(虽然不是最优的)的方式来实现这一目标有关的你的任务描述是通过添加下面的代码片段所示行:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyData == Keys.Left) 
     { 
     // add this line 
      if(!timerMoving.Enabled) timerMoving.Start();   
      left = true; 
      right = false; 
      down = false; 
      up = false; 

     } 
    } 

和删除这条线,如下图所示:

if (left) 
     { 

      Ghost.Left -= 5; 
      //timerMoving.Start(); - comment off 
     } 

希望这可能有所帮助。