2013-03-13 91 views
0

你好,我是新來的CSHARP,我嘗試了很多可看,解決疑難問題,不過是一個是一個新的錯誤,我以前還沒有看到:數組列表框中多維

「錯中一些指數[]; expected 1「

,我嘗試谷歌它,並嘗試以我自己的方式解決它,但我沒有找到解決方案。任何人都可以幫助我解決這個問題,並說我做錯了什麼?

public Form1() 
    { 
     InitializeComponent(); 
    } 

    class Planeet 
    { 
     public String Naam; 
     public Byte Grootte; 
     public Brush Kleur; 
     public short Afstand; 


     public Planeet(String argNaam, Byte argGrootte, Brush argKleur, short gAfstand) 
     { 
      Naam = argNaam; 
      Grootte = argGrootte; 
      Kleur = argKleur; 
      Afstand = argAfstand; 
     } 

    } 

    private void pbZonnestelsel_Click(object sender, EventArgs e) 
    { 

     Planeet[] arrPlaneten = new Planeet[9] 
     { 
     new Planeet("Mercurius", 4, Brushes.DarkGray, 4), 
     new Planeet("Venus", 10, Brushes.White, 20), 
     new Planeet("Aarde", 10, Brushes.LightBlue, 40), 
     new Planeet("Mars", 5, Brushes.Red, 60), 
     new Planeet("Jupiter", 112, Brushes.Orange, 80), 
     new Planeet("Saturnus", 94, Brushes.Beige, 200), 
     new Planeet("Uranus", 40, Brushes.Green, 300), 
     new Planeet("Neptunus", 38, Brushes.Blue, 350), 
     new Planeet("Pluto", 2, Brushes.LightGray, 400) 
     }; 


     for (int i = 0; i < arrPlaneten.GetLength(0); i++) 
     { 
      listBox1.Items.Add(arrPlaneten[i, 0,0,0]); 
      listBox1.Items.Add(arrPlaneten[0, i, 0,0]); 
     } 

    } 
} 

}

+1

'arrPlaneten'是一個維陣列,所以可以不接取這種方式:'arrPlaneten [I,0,0,0]'但只有'arrPlaneten [i]'。 – 2013-03-13 11:25:22

+0

要說出什麼問題,我們需要知道預期的結果。在編譯的方法是用arrPlaneten.Length(不要求但會有更好的性能)替換arrPlaneten.GetLength(0),並用listBox1.Items替換內部循環。添加(arrPlaneten [I]); – 2013-03-13 11:25:53

+0

這不是一個多維數組,你應該用它作爲arrPlaneten [i] – 2013-03-13 11:27:42

回答

3

你在做什麼在這裏,是沒有意義的。因爲你有一個一維數組,並將它當作第四維數組來處理。當循環遍歷for循環中的所有行星時,第二個添加到列表框中也是不必要的。

for (int i = 0; i < arrPlaneten.GetLength(0); i++) 
    { 
     listBox1.Items.Add(arrPlaneten[i, 0,0,0]); 
     listBox1.Items.Add(arrPlaneten[0, i, 0,0]); 
    } 

你想完成什麼?將星球添加到列表框?你會像這樣:

for (int i = 0; i < arrPlaneten.GetLength(0); i++) 
    { 
     listBox1.Items.Add(arrPlaneten[i]); 
    } 

注意Planeet類需要實現的ToString(),或者什麼也不會在列表框中顯示。所以加

public String ToString() { return this.Naam; }到類像這樣:

class Planeet 
{ 
    public String Naam; 
    public Byte Grootte; 
    public Brush Kleur; 
    public short Afstand; 


    public Planeet(String argNaam, Byte argGrootte, Brush argKleur, short argAfstand) 
    { 
     Naam = argNaam; 
     Grootte = argGrootte; 
     Kleur = argKleur; 
     Afstand = argAfstand; 
    } 

    public String ToString() 
    { 
     return Naam; //Or add more info here like return Naam + " " + Afstand; 
    } 
} 

二注:列表框可以容納任何對象的項目清單。但是,如果你不想引用對象,但只有它的名字,你應該改爲listBox1.Items.Add(arrPlaneten[i].Naam)

你也有short argAfstand一個錯字在你的代碼,它說:short gAfstand

+0

啊,我看到我的錯誤,我應該嘗試將我的一個數組轉換爲多維數組,使用我的數組中的每個元素seperately。例如:listbox1:Mercurius,金星,Aarde,火星,木星,Saturnus,天王星..而不是所有元素 – mrName 2013-03-13 11:31:02

+0

閱讀我在答案中的附加註釋。因爲你還沒有解決索引問題。我希望你的意思是「我不應該」而不是「我應該」。 – 2013-03-13 11:31:28

+0

@MikedeKlerk爲了完整起見,也許還要添加一個數據綁定列表框的例子,而不是手動添加項目。很可能會給出理想的結果,現在學習它將會爲未來的mrName大量工作節省時間。 – 2013-03-13 11:45:39

0

listBox1.Items.Add(arrPlaneten[i, 0,0,0]);你給四個以逗號分隔指數的陣列,這是一個語法錯誤。如果要從數組中檢索元素,請執行以下操作:

for (int i = 0; i < arrPlaneten.GetLength(0); i++) 
    { 
     listBox1.Items.Add(arrPlaneten[i]); 
    } 

只使用單個索引!

0

它看起來像你試圖錯誤地尋址數組。您將它編入索引,就好像它有四個維度一樣。

如果你想添加的所有項目的列表框,你可以這樣做:

foreach(Planeet aPlanet in arrPlaneten) 
{ 
    listbox1.Items.Add(aPlanet); 
} 

但是,你需要重寫的toString類,以使目錄表變得有意義。 ..

,也可以使用數據綁定listbox1.DataSource = arrPlaneten; 和選擇Listbox1.displayMember = "Naam"