2015-12-14 78 views
-2

違約時,我試圖用開關箱的功能,它會始終以默認的消息,除了案例5:開關箱去除了一種情況

private void btnCandlesLight_Click(object sender, EventArgs e) 
    { 
     int result; 
     result = Convert.ToInt32(textBox1.Text); 
     switch(result) 
     { 
      case 1: 
       day1.Start(); 
       candlesOne(); 
       break; 
      case 2: 
       day2.Start(); 
       candlesTwo(); 
       break; 
      case 3: 
       day3.Start(); 
       candlesThree(); 
       break; 
      case 4: 
       day4.Start(); 
       candlesFour(); 
       break; 
      case 5: 
       day5.Start(); 
       candlesFive(); 
       break; 
      case 6: 
       day6.Start(); 
       candlesSix(); 
       break; 
      case 7: 
       day7.Start(); 
       candlesSeven(); 
       break; 
      case 8: 
       day8.Start(); 
       candlesEight(); 
       break; 
      default: 
       MessageBox.Show("Enter new day"); 
       break; 
     } 
    } 

當我輸入值1,例如以文本框,默認情況下工作,但只有當我輸入值5,它完美的作品。 如果您想查看「candlesOne」功能與「candlesFive」功能之間的區別:

「c」變量是秒數的變量。我試圖用一種計時器,每隔2-3秒點燃一次蠟燭。

public void candlesOne() 
    { 
     firedmatch.Left = firedmatch.Left + 100; 
     if (c == 1) 
     { 
      candle1.Visible = true; 
     } 
     if (c == 3) 
     { 
      candle2.Visible = true; 
     } 
    } 

和:

public void candlesFive() 
    { 
     firedmatch.Left = firedmatch.Left + 100; 
     if(c == 1) 
     { 
      candle1.Visible = true; 
     } 
     if(c == 3) 
     { 
      candle2.Visible = true; 
     } 
     if(c == 5) 
     { 
      candle3.Visible = true; 
     } 
     if(c == 7) 
     { 
      candle4.Visible = true; 
     } 
     if(c == 11) 
     { 
      candle5.Visible = true; 
     } 
    } 

我還沒有發現一個錯誤, 你們可以幫助我嗎? 謝謝

+0

在你的代碼中加入一個斷點並檢查結果值。 – RajeeshMenoth

+0

嘗試調試結果的值。看起來這不是你所期待的。 – sachin

+4

您提供的代碼不是[mcve]。沒有看到所有相關的代碼,我們不可能知道什麼是錯的。例如,有一個叫做'c'的神祕變量。 – Enigmativity

回答

2

您是否檢查過您是否真的得到了例如(int)1作爲轉換結果「1」的結果?

在更廣泛的範圍內,代碼中有很多重複,您應該考慮對它進行一些重構。

在你的CandlesOne和CandlesFive方法中,你使用了一個c變量,不知道它是什麼或來自哪裏。這兩種方法(也可能是其他的CandlesXXX()做同樣的事情。難道你不能通過推廣邏輯來消除複雜性嗎?你的switch-case中使用的result是否可以作爲參數傳遞並用於觸發c == X調用的號碼在CandleXXX()方法?

這樣你可以刪除開關,失去了很多複雜的!

編輯

如果您還有其他問題,可以考慮創建一個.NET Fiddle,我錯過了很多在你的代碼中的上下文,所以我不能高效在這裏幫助你。

你一些重構的想法:

// Somewhere else in your code, create a dictionary with your day1-day8 objects 
var days = new Dictionary<int, Day>() 
days[1] = day1; 
... 
days[8] = day8; 

//Simplfiy your method 
private void btnCandlesLight_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     var dayIndex = Convert.ToInt32(textBox1.Text); 
     if(dayIndex > 0 && dayIndex <= 8) 
     { 
      days[dayIndex].Start(); //Get the corresponding day via its Key 
      LightUpCandles(dayIndex); //pass the key as a parameter 
     } 
     else 
     { 
      MessageBox.Show("Enter new day"); 
     } 
    } 
    catch(InvalidCastException exception) 
    { 
     //Whatever you do when the textbox cannot be parsed 
    } 
} 

我還沒有得到你的candlesOne五個方法真的做或爲什麼法「candlesOne」點亮兩支蠟燭(注意變量的命名)。我還沒有得到這如何彌補某種計時器的......但在這裏是它第一個潛在的重構反正:

public void LightUpCandles(int dayIndex) 
{ 
    firedmatch.Left = firedmatch.Left + 100; 
    if(c == 1) 
    { 
     candle1.Visible = true; 
    } 
    if(c == 3 && dayIndex > 1) 
    { 
     candle2.Visible = true; 
    } 
    if(c == 5 && dayIndex > 2) 
    { 
     candle3.Visible = true; 
    } 
    if(c == 7 && dayIndex > 3) 
    { 
     candle4.Visible = true; 
    } 
    if(c == 11 && dayIndex > 4) 
    { 
     candle5.Visible = true; 
    } 
} 
+0

「c」變量是秒的變量。我試圖用一種計時器,每隔2-3秒點燃一次蠟燭。 –

1

你切換邏輯是,我用下面的測試正確的;

int result; 
     result = Convert.ToInt32(textBox1.Text); 
     switch (result) 
     { 
      case 1: 
       MessageBox.Show("1"); 
       break; 
      case 2: 
       MessageBox.Show("2"); 
       break; 
      case 3: 
       MessageBox.Show("3"); 
       break; 
      case 4: 
       MessageBox.Show("4"); 
       break; 
      case 5: 
       MessageBox.Show("5"); 
       break; 
      case 6: 
       MessageBox.Show("6"); 
       break; 
      case 7: 
       MessageBox.Show("7"); 
       break; 
      case 8: 
       MessageBox.Show("8"); 
       break; 
      default: 
       MessageBox.Show("Enter new day"); 
       break; 
     } 

如果你沒有得到相同的結果我想也許是看製作上面顯示的消息框變量的數據類型。

MessageBox.Show(result.GetType().ToString()); 
+0

我刪除了默認值,只是爲了檢查問題是否在變量中,它仍然顯示我默認的 –

+0

@H.Astrin,停下來想想你剛剛在那裏說了些什麼。如果您刪除了默認設置,重新構建了代碼並再次運行該代碼,則無法向您顯示默認設置。聽起來你的代碼沒有編譯和/或你運行的是舊版本。嘗試清理/重建您的解決方案。 –

+0

@DavidArno正是我想說的。這很奇怪。你能向我解釋什麼會導致這個問題?它發生在過去,在我的個人電腦,我的筆記本電腦和我學校的電腦中,我正在運行最新版本的VS13 –

相關問題