Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.05.2014, 02:42

(C#) Felder eines Arrays lösen ein Event aus <- Methode soll unterscheiden, welches Feld sie aufgerufen hat

Hi

Es ist schon etwas spät heute, aber da ich mich schon länger an diesem Problem herumprobiere, ohne eine Lösung zu finden, will ich euch noch heute um Hilfe bitten, dann kann ich beruhigt schlafen ;)

Folgendes: Anhand dieses YT-Tutorials (ihr müsst es euch nicht ansehen, um das Problem zu verstehen), versuche ich, ein Spiel in der Art von Risiko zu schreiben, falls das jemand kennt. Dafür benötige ich allerdings ein in "Felder" aufgeteiltes Spielfeld, das natürlich auf die Maus reagiert. Ich habe es bereits geschafft, mittels eines zweidimensionalen PictureBox-Arrays das Feld zu designen. Ich kann auch in der Logik problemlos auf die einzelnen Felder zugreifen, sie erscheinen alle am Bildschirm, damit gibt es keinerlei Problem.

Da ich, anders als im Video, C# verwende, muss ich bei manchen gezeigten Dingen herumprobieren, bzw. habe manches gänzlich anders umgesetzt. Wie ich es auch versuche, es gelingt mir einfach nicht, den Array so zu schreiben, dass die Methoden unterschiedlich reagieren, wenn sie von unterschiedlichen Feldern, bzw. deren Events aufgerufen werden. Beispiel: Ich möchte, dass eine PictureBox die Hintergrundfarbe ändert, solange sich die Maus darüber befindet. Dazu muss die Spielfeld_MouseEnter - Methode unterscheiden können, von welcher PictureBox des Arrays sie aufgerufen wurde. Dazu finde ich aber einfach keine Möglichkeit. Ich kopiere nachfolgend den relevanten Code:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
        //Der zweidimensionale Array:
        System.Windows.Forms.PictureBox[,] Spielfeld;

        private void Form1_Load(object sender, EventArgs e)
        {
            Spielfeld = new PictureBox[_Static.Spielfeldmaß_x, _Static.Spielfeldmaß_y];

            int i1 = 0;
            int i2 = 0;

            //Das Spielfeld wird entspechend der statischen Werte generiert:
            while (i1 < _Static.Spielfeldmaß_x)
            {
                while (i2 < _Static.Spielfeldmaß_y)
                {
                    Spielfeld[i1, i2] = new PictureBox();
                    Spielfeld[i1, i2].Load("C:\\temp\\St\\bild.png");
                    Spielfeld[i1, i2].BackColor = Color.LightBlue;
                    Spielfeld[i1, i2].Left = 20 + i2 * _Static.Feldmaß;
                    Spielfeld[i1, i2].Top = 20 + i1 * _Static.Feldmaß;
                    Spielfeld[i1, i2].Height = _Static.Feldmaß;
                    Spielfeld[i1, i2].Width = _Static.Feldmaß;
                    Spielfeld[i1, i2].Visible = true;

                    //Hier ist das Problem: Ich finde keine Möglichkeit, die Methode wissen zu lassen, welche PictureBox sie aufgerufen hat.
                    Spielfeld[i1, i2].MouseEnter += new System.EventHandler(this.Spielfeld_MouseEnter);

                    Controls.Add(Spielfeld[i1, i2]);

                    i2++;
                }

                i2 = 0;
                i1++;
            }
        }

        //Die Methode:
        private void Spielfeld_MouseEnter(object sender, EventArgs e)
        {
            //Hier soll die Hintergrundfarbe geändert werden. Aber von welcher PictureBox?
        }


Gibt es irgendein Schlüsselwort oder eine Möglichkeit, weitere Parameter zu übergeben? Oder stelle ich mich nur ungeschickt an?

Ich hoffe, ihr könnt mir helfen.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

2

18.05.2014, 09:17

Wenn du sender im Eventhandler nach PictureBox castest, dann hast Du deine PictureBox wieder

3

18.05.2014, 15:11

Habs geschafft, danke! :)

Für den Fall, dass noch mal jemand das selbe Problem hat und auf diesen Thread stößt:

C#-Quelltext

1
2
PictureBox a = (PictureBox)sender;
a.BackColor = Color.DarkRed;

Werbeanzeige