2014-09-29 109 views
1

在下面的代码片断中,我打算在每个计时器滴答事件中使用,它应该属于switch语句的'next'情况。 但是,正如我跑,它首先通过Odd案件,然后甚至案件?Switch-Case块没有按预期执行?

我正在犯什么错误?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     switch (SCROLL_SCREEN_NO) 
     { 
      case 0: 
        SCROLL_SCREEN_NO = 1; 
        break; 

      case 1: label1.Text = "Param1"; 
        label2.Text = "1234"; 
        SCROLL_SCREEN_NO = 2; 
        break; 

      case 2: label1.Text = "Param2"; 
        label2.Text = "5678"; 
        SCROLL_SCREEN_NO = 3; 
        break; 

      case 3: label1.Text = "Param3"; 
        label2.Text = "9012"; 
        SCROLL_SCREEN_NO = 0; 
        break; 

      case 4: label1.Text = "Param4"; 
        label2.Text = "0"; 
        SCROLL_SCREEN_NO = 5; 
        break; 

      case 5: label1.Text = "Param5"; 
        label2.Text = "02"; 
        SCROLL_SCREEN_NO = 0; 
        break; 

      default: { break; } 
     } 
    } 
+1

不正确调试,而不是编码相关样品。开关通过显示元素。在你的代码中弄脏你的代码不会去调试它。 – TomTom 2014-09-29 04:56:41

+0

你的滴答计数是多少?我怀疑在为下一次执行设置SCROLL_SCREEN_NO之前计时器会打勾。 – bit 2014-09-29 04:57:28

+2

情况3看起来不正确,它将其设置回0 – 2014-09-29 04:58:22

回答

2

你的代码是真的出错的,试试这个:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    string[] L1Keys = new string[]{"Param1", "Param2","Param3","Param4","Param5"}; 
    string[] L2Keys = new string[]{"1234", "5678","9012","0","02"}; 
    label1.Text = L1Keys[SCROLL_SCREEN_NO]; 
    label2.Text = L2Keys[SCROLL_SCREEN_NO]; 

    if(SCROLL_SCREEN_NO >=0 && SCROLL_SCREEN_NO<=4) 
     SCROLL_SCREEN_NO = (SCROLL_SCREEN_NO+1) % 5; 
} 
+0

没有帮助。只运行Param3,Param5和Param1。 – jrk007 2014-09-29 05:22:18

+0

我编辑这个,现在我测试它,它工作@ jrk007 – 2014-09-29 05:26:53

+0

即使我编辑和测试相同的变化,这是巧合。但它仍然通过Param3,Param5,Param1,Param2,Param4运行 – jrk007 2014-09-29 05:30:16

0

您的代码似乎没问题。 您是否在此计时器滴答事件之外使用SCROLL_SCREEN_NO? 如果是这样,那么请再次查看使用SCROLL_SCREEN_NO的代码。

+0

SCROLL_SCREEN_NO只在外面初始化。休息一切只在timer1_tick完成。 – jrk007 2014-09-29 05:08:44