Benutzer mit den meisten Antworten
array mit event

Frage
-
Hey,
Ich möchte ein Spielfeld aus Pictureboxen 10x10 erstellen.
und jede PictureBox soll mehrere Events enthalten, die aber alle die gleiche Funktion haben.
private void Level1_Load(object sender, EventArgs e) { int counter=1; int x, y; PictureBox[] Feld = new PictureBox[100]; for (x = 1; x != 10; x++) { for (y = 1; y != 10; y++) { Feld[counter] = new PictureBox(); Feld[counter].Image = Properties.Resources.Feld1; Feld[counter].Location = new Point(Feld[counter].Location.X + 20, Feld[counter].Location.Y); Feld[counter].Name = "Feld_" + x + "_" + y ; Feld[counter].Size = new Size(20, 20); Feld[counter].SizeMode = System.Windows.Forms.PictureBoxSizeMode.Normal; Feld[counter].MouseMove+= new EventHandler(this.Feld_MouseMove); Controls.Add(Feld[counter]); counter++; } y = 1; } }
Wie realisiere ich nun für jede PictureBox eine eventmethode daraus:
Feld[counter].MouseMove+= new EventHandler(this.Feld_MouseMove);
?
Antworten
-
Hallo,
ergänzend zu Stefan:
Wenn dir eine Methodensignatur nicht klar ist, klicke in "Feld_MouseMove" und drücke Strg + Punkt [.]. In dem erscheinenden Menü kannst du dir dann die Methode mit der richtigen Signatur erstellen lassen.
Der sender-Parameter enthält die auslösende PictureBox. Wenn du dann noch die Koordinaten jeder PictureBox in der Tag-Eigenschaft speicherst (braucht man für nichts anderes), kannst du einfach die Koordinaten bestimmen. (Das Array selbst muss dafür direkt in der Klasse liegen, nicht in Level1_Load.)
Beim erstellen:
Feld[counter].Tag = new Point(x,y);
Das auslesen von x und y:var p=(Point)(sender as PictureBox).Tag; var x=p.X; var y=p.Y;
Ich empfehle dir außerdem ein 2D Array von PictureBoxen zu verwenden. Dadurch kannst du die Koordinaten einfacher einer PB zuordnen:PictureBox[,] Feld =new PictureBox[10,10];
Beim Zuweisen kannst du dann direkt mit x und y arbeiten und musst keinen Zähler hoch zählen.
Auch kannst du x und y direkt im Schleifenkopf deklarieren:
for(int x=0;x<10;++x) for(int y=0;y<10;++y)
Dadurch brauchst du y nicht immer zurück zu setzen.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Kalicronic Freitag, 20. Juni 2014 13:32
Alle Antworten
-
Hi,
wo ist denn deine Methode "Feld_MouseMove"? Die musst Du schon in der Klasse haben, wenn Du sie verwenden willst.
Wenn Du nicht weißt, wie die Methodensignatur aussehen soll:
private void Feld_MouseMove( object sender, System.Windows.Forms.MouseEventArgs e ) { ... }
Siehe dazu auch:
http://msdn.microsoft.com/de-de/library/system.windows.forms.control.mousemove.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo,
ergänzend zu Stefan:
Wenn dir eine Methodensignatur nicht klar ist, klicke in "Feld_MouseMove" und drücke Strg + Punkt [.]. In dem erscheinenden Menü kannst du dir dann die Methode mit der richtigen Signatur erstellen lassen.
Der sender-Parameter enthält die auslösende PictureBox. Wenn du dann noch die Koordinaten jeder PictureBox in der Tag-Eigenschaft speicherst (braucht man für nichts anderes), kannst du einfach die Koordinaten bestimmen. (Das Array selbst muss dafür direkt in der Klasse liegen, nicht in Level1_Load.)
Beim erstellen:
Feld[counter].Tag = new Point(x,y);
Das auslesen von x und y:var p=(Point)(sender as PictureBox).Tag; var x=p.X; var y=p.Y;
Ich empfehle dir außerdem ein 2D Array von PictureBoxen zu verwenden. Dadurch kannst du die Koordinaten einfacher einer PB zuordnen:PictureBox[,] Feld =new PictureBox[10,10];
Beim Zuweisen kannst du dann direkt mit x und y arbeiten und musst keinen Zähler hoch zählen.
Auch kannst du x und y direkt im Schleifenkopf deklarieren:
for(int x=0;x<10;++x) for(int y=0;y<10;++y)
Dadurch brauchst du y nicht immer zurück zu setzen.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Kalicronic Freitag, 20. Juni 2014 13:32