0

こんにちは、私は csharp を初めて使用し、難しい問題を確認して解決するために多くの実験を行っていますが、1 つは新しいエラーであり、以前に見たことがないものです。

「[] 内のインデックスの数が間違っています。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 ループですべての惑星をループしている場合、リストボックスへの 2 番目の追加は不要です。

    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]);
    }

クラスは ToString Planeet() を実装する必要があります。そうしないと、リストボックスに何も表示されません。だから追加

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;
    }
}

2 番目の注意: リストボックスは、任意のオブジェクトの項目のリストを保持できます。ただし、オブジェクトを参照するのではなく、その名前のみを参照する場合は、listBox1.Items.Add(arrPlaneten[i].Naam)代わりに行う必要があります。

short argAfstandコードにもタイプミスがあります。short gAfstand

于 2013-03-13T11:25:58.320 に答える
0

配列のアドレスを間違えようとしているようです。4 つの次元があるかのようにインデックスを付けています。

すべてのアイテムをリストボックスに追加しようとしている場合は、次のようにできます。

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]);配列にカンマで区切られた 4 つのインデックスを指定している場合、これは構文エラーです。配列から要素を取得する場合は、次のようにします。

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

インデックスは 1 つだけ使用してください。

于 2013-03-13T11:25:59.453 に答える