# gleiches Event für mehrere Objekte mittels Schleife abfragen



## Benni (15 November 2011)

Guten morgen,
Ich habe heute ein neues aber vielleicht einfaches Problem und zwar geht es um folgendes:
Ich programmiere in der Sprache C#. Außerdem will ich in einem panel 32 Pictureboxen darstellen, falls einem die Zahl 32 bekannt vor kommt, genau es handelt sich um ein Kartenspiel :wink:

Auf jeden fall will ich es realisieren dass wenn man über die Karte fährt, sich diese etwas anhebt und beim verlassen der Karte sich diese wieder etwas senkt.

bisher habe ich das so gelöst, dass ich das MouseMove und das MouseLeave event benutze, jedoch dies wird relativ unübersichtlich wenn ich dies für jede einzelne picturebox so mache. Deshalb ist hier meine Frage, ob ich die picturebox bzw. deren Location auch allgemein setzen und abfragen kann?

Bisher habe ich dies so realisiert:

private void pictureBox_alle_Karten_erste_Haelfte_1_MouseMove(object sender, MouseEventArgs e)
{
pictureBox_alle_Karten_erste_Haelfte_1.Location = new Point(pictureBox_alle_Karten_erste_Haelfte_1.Location.X, y - 9);
}
private void pictureBox_alle_Karten_erste_Haelfte_1_MouseLeave(object sender, EventArgs e)
{
pictureBox_alle_Karten_erste_Haelfte_1.Location = aktuelle_pos;
}

Aber wie gesagt dies für 32 oobjekte bzw. später wieder für 32 andere Objekte zu machen ist relativ aufwändig und Coderaubend...

Hat mir da jemand eine andere Lösung?
Zur Not würde ich auch eine neue Klasse (Karteicturebox) machen, wenn ich in ihr sagen könnte, MouseMove() und MouseLeave(), bin mir jedoch nicht sicher ob dies überhaupt geht...​


----------



## mkoenig (16 November 2011)

Guten Morgen,

Damit du nicht 32x das gleiche Event hinschreiben musst kannst du dir es einfach machen und dies nur einmal machen und die restlichen male auf dieses verweisen.

Zuerst folgendes Code-fragment:

```
private Point last_pos;
        private Point new_pos = new Point();
        private PictureBox pbox;
        private void pbox_MouseEnter(object sender, EventArgs e)
        {
            pbox = (PictureBox)sender;
            last_pos = pbox.Location;
            new_pos = new Point(pbox.Location.X, pbox.Location.Y - 9);
            pbox.Location = new_pos;
        }

        private void pbox_MouseLeave(object sender, EventArgs e)
        {
            pbox = (PictureBox)sender;
            pbox.Location = last_pos;
        }
```

Jetzt anstatt jeder Picturebox über das Eigenschaftenfenster die Events zuzuweisen geh in die zeile unter *InitializeComponent(); *und füge die Events folgendermaßen hinzu:

```
// Events für PictureBox 1
            this.pictureBox1.MouseEnter += new System.EventHandler(this.pbox_MouseEnter);
            this.pictureBox1.MouseLeave += new System.EventHandler(this.pbox_MouseLeave);

            // Events für PictureBox 2
            this.pictureBox2.MouseEnter += new System.EventHandler(this.pbox_MouseEnter);
            this.pictureBox2.MouseLeave += new System.EventHandler(this.pbox_MouseLeave);
```

C# 2010 Project
Anhang anzeigen MoveObject.zip


----------



## Benni (16 November 2011)

Hey Manuel,
cool Danke, dann versuch ich mal mein bestes...

Gruß Benni


----------



## Benni (17 November 2011)

Danke, ich habs nun so ähnlich hinbekommen, dank dir vielmals das hat mich nun ein Stück weitergebracht.

Weißt du eigentlich wie das hier läuft? Wenn ein Thread erledigt ist, wird der dann nach einer Weile automatisch geschlossen oder muss man das irgendwie manuell erledigen? Wenn manuell, dann wie?

Gruß Benni


----------



## mkoenig (17 November 2011)

Tut mir leid da bin ich überfragt. Bis jetzt hatte ich noch keine eigenen threads hier offen.


----------

