Autor Beitrag
Pimpfson
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 12.05.10 15:03 
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.

ausblenden 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.

ausblenden 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:

ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 12.05.10 15:27 
:welcome: !

user profile iconPimpfson hat folgendes geschrieben Zum zitierten Posting springen:
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.
Dafür hat Control die Eigenschaft Tag, der du jeden beliebigen Wert zuordnen kannst. Du kannst sie also beim Erstellen der PictureBox mit der entsprechenden Kartenpaar-Instanz füllen und im Click-Event diese dann auslesen.

_________________
>λ=
Pimpfson Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 12.05.10 17:25 
Danke dir! Hat mir weitergeholfen.