2013-05-08 71 views
0

我必須製作一個簡單的Windows窗體應用程序,讓玩家輪流使用計算機進行操作(我使用隱藏的標籤製作),但是我遇到問題與因爲它會導致運行錯誤「索引超出範圍」,我不能弄清楚pc的代碼..C#運行時錯誤:索引超出範圍

private void pcTake(int x) 
    { 
     textBox1.Text = "I take " + x; 
     for (int i = 0; i < labels.Count; i++) 
     { 
      if (labels[i].Visible == false && labels[i + 1].Visible == true) 
      { 
       while (x > 0) 
       { 
        if (x + i > labels.Count) 
         break; 
        labels[i + x].Visible = false; 
        x--; 
       } 
       break; 
      } 
     } 

    } 

X是一個隨機數, 標籤是一個含標籤的清單

foreach (Control c in this.Controls) 
     { 
      if (c is Label) 
      { 
       labels.Add(c); 
       c.Enabled = true; 
      } 
     } 

在此先感謝

+0

您是否設置了斷點,持續跟蹤我和X的值,並計算出它的代碼行示數了呢?排除此錯誤的第1步是瞭解您正在訪問的數組索引以及數組的長度。有關斷點的信息,請參閱http://msdn.microsoft.com/en-us/library/ktf38f66%28v=vs.71%29.aspx – David 2013-05-08 04:51:31

回答

4

你得到beause你比較例外

labels[i + 1].Visible == true 

,因爲你的循環是基於< labels.Count,當環路指數達到count - 1,這意味着,你的條件是假設檢查數組索引count(因爲i + 1),因爲數組的索引是0,所以你會得到異常。

如果你想檢查當前指數和之後的索引,然後你的循環條件應該是i < labels.Count - 1像:

for (int i = 0; i < labels.Count - 1; i++) 
+0

...我真的很愚蠢,沒有看到,謝謝; 現在又出現了另一個問題,應該消失的標籤不會有任何想法嗎? – KGS 2013-05-08 08:28:59

1

在C#中,數組是0指數的,所以最後的產品標籤[labels.Count -1];你應該改變這種

if (x + i > labels.Count) 
    break; 

這個

if (x + i > labels.Count -1) 
    break;