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.