0

您好,我是 csharp 的新手,我进行了很多实验以查看和解决难题,但是一个是新错误,我以前从未见过:

“[] 内的索引数量错误;预期为 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]);
        }

    }
}

}

4

3 回答 3

3

你在这里做什么,毫无意义。因为您有一个一维数组,并将其视为 4 维数组。当您在 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

于 2013-03-13T11:25:58.320 回答
0

看起来您正在尝试对数组进行错误寻址。您正在索引它,就好像它有四个维度一样。

如果您尝试将所有项目添加到列表框中,您可以这样做:

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

但是,您将需要在您的类中覆盖 ToString 以使列表框条目有意义......

或者您可以使用数据绑定listbox1.DataSource = arrPlaneten; 和选择Listbox1.displayMember = "Naam"

于 2013-03-13T11:32:50.590 回答
0

listBox1.Items.Add(arrPlaneten[i, 0,0,0]);您为数组提供四个逗号分隔的索引时,这是一个语法错误。如果要从数组中检索元素,请执行以下操作:

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

只使用一个索引!

于 2013-03-13T11:25:59.453 回答