2014-09-29 63 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