Hallo,
ich bin mir nicht sicher, ob Jasons Antwort wirklich hilfreich ist. Das hängt sehr davon ab, an welchen Stellen du sonst noch auf eine bestimmte PictureBox zugreifen willst. Es kann helfen, führt aber u.U. zu weit vom Weg ab.
Jedes
Control hat die Eigenschaft
Name. Die wird in deinem Code überhaupt nicht benutzt; laut
SDK-Doku ist der Standardwert eine leere Zeichenfolge. Damit kannst du zwischen den verschiedenen PictureBoxen überhaupt nicht unterscheiden. Der erste Schritt muss also sein, a.Name festzulegen.
Mit
Controls.FindControl("was auch immer") kannst du ein bestimmtes Control wiederfinden und auch als PictureBox benutzen:
C#-Quelltext
1: 2: 3: 4:
| PictureBox pb = Controls.Find("MyPictureBox27") as PictureBox; if (pb != null) { } |
Du hast auch noch einen schwerwiegenden Denkfehler. Eine Variable ist zwar so etwas wie ein Zeiger auf ein spezielles Objekt im Arbeitsspeicher; aber sie hat immer nur einen bestimmten
Gültigkeitsbereich. Bei deinem Code wird eine PictureBox erzeugt und der Controls-Liste hinzugefügt. In dieser Liste steht sie und bleibt sie stehen. Aber die Variable a ist außerhalb der MouseDown-Methode völlig unbekannt; es gibt keinen dauerhaften Zusammenhang zwischen a und einem bestimmten Objekt. Nur durch eine neue Zuweisung (wie in meinem Code) bekommt man wieder eine Variable, die mit dem Objekt vorübergehend verbunden ist.
Übrigens: Du solltest
using-Direktiven verwenden, damit der Code kürzer wird. Ein Namespace wie Forms wird so oft benutzt, dass man zu schreibfaul ist; System.Drawing ist ein Grenzfall. "
this" kann fast immer entfallen (auch wenn der Designer das schreibt); es ist gibt doch keinen Zweifel darüber, welche Controls (in deinem Code) gemeint sind.
Laufende Nummern für Namen von Controls sind nur in einem solchen Ausnahmefall akzeptabel, siehe
NET Richtlinien für Namen.
Gruß Jürgen