c# zweidimensionales array

xlon

Mitglied
Hallo, ich habe folgendes problem:


Code:
for (int i = 0; i < int.Parse(txtanzahlad.Text); i++)
    {
  for (int j = 1; j <= 5; j++)
        {
            TextBox txtping = new TextBox();
            txtping.Name = "txtping" + i.ToString() + "_" + j.ToString();
            txtping.Location = new Point(iX+300+pingx, iY);
            txtping.Size = new Size(67, 20);
            txtping.Visible = true;
            txtping.ReadOnly = true;
            panel1.Controls.Add(txtping);

            pingx += 80;
}
        }

dies möchte ich zweidimensional machen. ein einfaches Array funktioniert....aber ich kann es nicht zwei dimensional machen...

Code:
//in public partial class Form1 : Form
TextBox[][] txtping;
//vor meiner schleife
txtping  = new TextBox[int.Parse(txtanzahlad.Text)][5];

//meine angepasste schleife:

for (int i = 0; i < int.Parse(txtanzahlad.Text); i++)
    {
  for (int j = 1; j <= 5; j++)
        {
            txtping[i][j] = new TextBox();
            txtping[i][j].Name = "txtping" + i.ToString() + "_" + j.ToString();
            txtping[i][j].Location = new Point(iX+300+pingx, iY);
            txtping[i][j].Size = new Size(67, 20);
            txtping[i][j].Visible = true;
            txtping[i][j].ReadOnly = true;
            panel1.Controls.Add(txtping[i][j]);

            pingx += 80;
}

wenn ich es so mache, gibt er mir ein fehler aus.

ich hoffe ihr könnt mir weiterhelfen
 
Problem ist
<=5
muss
< 5
lauten

Der Index beginnt ja bei 0, und die Länge beträg 5,
0
1
2
3
4
= 5 Einträge (soviel wie du im Array alloziiert hast)
(Ändert auch nixs dran wenn du in der Schleife bei 1 beginnst ;) )
 
Ein Fehler ist auf jeden Fall, dass j von 1 bis 5 läuft, die entsprechende Dimension des Arrays aber auf 5 dimensioniert ist, also kein Element mit dem Index 5 hat (4 ist der höchste Index). Das gibt eine IndexOutOfRangeException beim letzten Durchlauf der inneren Schleife.Du musst entweder j von 0 bis 4 laufen lassen oder die zweite Dimension von txtping auf 6 erhöhen. Ersteres ist sauberer, da man bei Array-Indizes generell bei 0 beginnt zu zählen.

Gruß

Stefan
 
danke für eure antwort,

wenn ich es so habe:
Code:
txtping = new TextBox[int.Parse(txtanzahlad.Text)][];

 for (int j = 0; j < 5; j++)
        {
            txtping[i][j] = new TextBox();
            
            txtping[i][j].Name = "txtping" + i.ToString() + "_" + j.ToString();
            txtping[i][j].Location = new Point(iX+300+pingx, iY);
            txtping[i][j].Size = new Size(67, 20);
            txtping[i][j].Visible = true;
            txtping[i][j].ReadOnly = true;
            panel1.Controls.Add(txtping[i][j]);

            pingx += 80;
        }

bekomme ich folgenden fehler

Code:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

wenn ich es aber so mache :

Code:
txtping = new TextBox[int.Parse(txtanzahlad.Text)][5];
sagt er mir sofort
Code:
Fehler	1	Ungültiger Rangbezeichner: Erwartet wird "," oder "]".

mhmm :(
 
Das sind Grundlagen - du musst das so schreiben:
C#:
txtping = new TextBox[int.Parse(txtanzahlad.Text), 5];

Gruß
MCoder
 
Ja das habe ich auch schon gemacht, habe schon einen kompletten Arbeitstag investiert, finde aber den Fehler nicht. Bei "normalen" zweidimensionalen array funktioniert es ja, aber irgendwie sagt er mir hier

Code:
txtping[i][j] = new TextBox();

einen fehler. und ich weiß nicht warum
 
Danke für deine Antwort MCoder, aber wenn ich es so schreibe, kommt folgender Fehler:

Code:
Fehler	1	Eine implizite Konvertierung vom Typ "System.Windows.Forms.TextBox[*,*]" in "System.Windows.Forms.TextBox[][]" ist nicht möglich.

mhmm aber es liegt nicht schon hier drann oder?

Code:
TextBox[][] txtping;
 
Zurück