Dynamisch erstelle PictureBox verändern
-
Hallo,
ich verstehe nicht, warum folgendes nicht funkioniert:
Erst erstelle ich eine Picturebox
PictureBox[] RelaisDependency; RelaisDependency = new PictureBox[10];
Dann erstelle ich diese mit einer for schleife
for(...) { RelaisDependency[i].MouseEnter += new System.EventHandler(this.RelaisDependency_MouseEnter); RelaisDependency[i].Click += new System.EventHandler(this.RelaisDependency_Click); RelaisDependency[i].BorderStyle = System.Windows.Forms.BorderStyle.None; RelaisDependency[i].Name = Convert.ToString(RelaisNumber * j + i); RelaisDependency[i].Location = new Point(RelaisDependencyX + 21 * i, RelaisDependencyY+20 + j * 21); RelaisDependency[i].Size = new Size(20, 20); RelaisDependencyTab.Controls.Add(RelaisDependency[i]); }
soweit sogut. Alles klappt so wie ich es will
Nun will ich bei Klick auf eines der Pictureboxen was tun...
private void RelaisDependency_Click(object sender, EventArgs e) { PictureBox RelaisDependency = (PictureBox)sender; // Hier will ich nur die Farbe der angeklickten Picturebox ändern RelaisDependency.BackColor = System.Drawing.Color.Red; // Hier mein Problem //Ich will aus dem selben Schwung eine andere PictureBox verändern: int i = 2; // Nur mal als Beispiel ((PictureBox)RelaisDependency[i]).BackColor = System.Drawing.Color.Green; }
Also Fehler sagt er mir:
Fehler 1 Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "System.Windows.Forms.PictureBox" angewendet werden.Wie geht es sonst? Ich dachte ich hätte es so schon einmal gemacht...?!
Gruß
-
Es fehlt wohl noch eine weitere Klammerung:
((PictureBox)(RelaisDependency[i])).BackColor = System.Drawing.Color.Green;
P.S: Laut deinem geposteten Code erstellst du aber nirgendwo die PictureBoxen:
RelaisDependency[i] = new PictureBox();
-
Hallo,
danke für dein Antwort.Wenn ich die Klammern einfüge, erhalte ich die gleiche Fehlermeldung.
Doch doch, ich erstelle die Picturebox schon, das klappt auch gut...
PictureBox[] RelaisDependency; RelaisDependency = new PictureBox[10];
-
Ok, jetzt sehe ich deinen Fehler.
Schau dir mal die Variablennamen innerhalb deiner Methode an...P.S. Mit (zusammengefaßt)
PictureBox[] RelaisDependency = new PictureBox[10];
erstellst du keine 10 PictureBox-Instanzen, sondern nur ein Array, dessen Inhalt alle den Wert 'null' haben (Kannst du ja im Debugger einfach sehen).
Du solltest bei C# den Unterschied zwischen Werte- und Refererenztypen kennen (bzw. lernen).
-
Ah, ne, das hatte ich auch drin
also innerhalb der for schleifeRelaisDependency[i] = new PictureBox();
wie gesagt, die PictureBoxen werden erstellt und ich kann die eine Box auch anklicken und sie ändert ihre Farbe...
Ich kann nur nicht im gleichen click event eine andere der erstellten Boxen ändern.
-
VIVUSorg schrieb:
PictureBox[] RelaisDependency; RelaisDependency = new PictureBox[10];
private void RelaisDependency_Click(object sender, EventArgs e) { PictureBox RelaisDependency = (PictureBox)sender; }
Dann schau mal genau hin. Du benutzt den Namen "RelaisDependency" zweimal für unterschiedliche Sachen.
Ausserhalb der Click-Methode ist"RelaisDependency" eine PictureBox-Array, innerhalb eine einfache PictureBox.
Der Fehler selbst ist absolut banal dumm, jetzt musst Du ihn nur noch erkennen... Dann sollte der Facepalm folgen.
-
loks schrieb:
... jetzt musst Du ihn nur noch erkennen... Dann sollte der Facepalm folgen.
mir fehlt hier der like button :p
-
eieieieieie
Kommt hin...