Hallo,
ich bin neu in der Materie C# und Programmierung im allgemeinen. Derzeit versuche ich durch diverse kleine Projekte mir das ganze selbst beizubringen. Im Moment ist dies ein Memory Spiel basierend auf der Picturebox Klasse von C#.
Im folgenden schreibe ich ein paar verkürzte Zeilen aus meinem Programmcode. Ich habe eine Klasse namens "Kartenpaar" erstellt, diese besteht aus 2 Pictureboxen und einem Bild.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| class Kartenpaar { internal PictureBox Karte1 = new PictureBox(); internal PictureBox Karte2 = new PictureBox(); internal Bitmap picture; } |
Das Spiel ist dynamisch gehalten und es werden nach vorheriger Benutzerangabe entsprechend viele Kartenpaare erstellt. Zu erwähnen wäre noch, dass ich nicht den Formdesigner von Visual C# benutze, sondern alles "manuell" einfüge.
Irgendwann kommt im Programm dann z.B.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Kartenpaar[] Spielkarten = new Kartenpaar[10] for (int k=0; k<10;k++) { Spielkarten[k]= new Kartenpaar(); Spielkarten[k].Karte1.Click += new EventHandler(this.Karte_Click); Spielkarten[k].Karte2.Click += new EventHandler(this.Karte_Click); ... } |
Hier werden noch die Pictureboxen entsprechend auf der Windows Form platziert. Probleme habe ich nun mit der Karte_Click Methode.
Ich möchte bei einem Click auf die entsprechende Box das Bild der zugehörigen Kartenpaar Instanz anzeigen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private void Karte_Click(object sender, EventArgs e) { PictureBox bild = sender as PictureBox;
for (int k = 0; k < 10; k++) { if (Spielkarten[k].Karte1.Equals(bild)) { bild.Image = Spielkarten[k].picture; break; } if (Spielkarten[k].Karte2.Equals(bild)) { bild.Image = Spielkarten[k].picture; break; } } } |
Das ist derzeit meine Lösung. Das diese nicht das nonplusultra ist, ist mir bewusst. Meine Frage ist nun, wie ich mittels der Referenz sender, die ja auf eine Picturebox zeigt, eine Referenz auf genau die Instanz von Kartenpaar bekommen kann, in der die sender Picturebox enthalten ist. Geht das überhaupt mit einem allgemeinen Befehl? Theoretisch könnte ich ja mehreren Instanzen von Kartenpaar immer dieselbe Picturebox zuordnen.
Gruß
Moderiert von
Christian S.: C#-Tags hinzugefügt