Laden...

Wie kann ich durch alle pictureBoxes durchgehen

Erstellt von dietbeck vor 14 Jahren Letzter Beitrag vor 14 Jahren 734 Views
D
dietbeck Themenstarter:in
47 Beiträge seit 2006
vor 14 Jahren
Wie kann ich durch alle pictureBoxes durchgehen

Hallo,

wäre schön wenn mir jemand helfen könnte.

Ich habe eine Reihe von pictureBox-Objekten in meinem Form, genannt pictureBox1, pictureBox2, pictureBox3...

Ich möchte diesen mit einem while-, foreach- oder anderem Loop Images zuordnen. Ich hatte gedacht die Zahl im Namen der pictureBoxen zu benutzen. Ich habs aber bisher noch nicht hingekriegt, die Zahl entsprechend zu isolieren und für den Loop zu benutzen um dann die einzelnen pictureBoxen anzusteuern, da ich so ja mit einem String arbeiten muss, mit dem ich im Endeffekt kein pictureBox.Image Objekt erstellen kann.

dietbeck

239 Beiträge seit 2008
vor 14 Jahren

Hallo dietbeck,

du kannst in deiner Schleife die Controls-Property deines Fensters durchlaufen und dort prüfen, ob es sich um eine PictureBox handelt oder nicht und dieser dann Werte zuweisen.


foreach (Control ctl in this.Controls)
{
  PictureBox pb = ctl as PictureBox;
  // oder
  if (ctl is PictureBox)
  // ... do something
}

Wenn du natürlich unterschiedliche Images zuordnen musst, dann müsstest du bei diesem Ansatz noch irgendwie anhand des Namens prüfen, welches Bild wohin gehört. So richtig gut passt das also nur, wenn du allen PictureBoxes das gleiche Bild zuweisen willst. Ansonsten brauchst du eine Fallunterscheidung.

Gruß Michbeck1983

Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁


[URL]XING-Profil[/URL]

D
dietbeck Themenstarter:in
47 Beiträge seit 2006
vor 14 Jahren

Hallo Michelbeck,

der Ansatz hiflt mir schonmal sicher weiter. Tatsächlich soll jede PictureBox ein anderes Image erhalten. Problemlos wäre der Ansatz dann, wenn die PictureBox-Controls im foreach auch tatsächlich in der Reihenfolge durchlaufen werden, wie Sie erzeugt wurden. Dann ist die Zuordnung der Bilder aus einer ArrayList ok. Wenn die PictureBox-Controls aber "random" durchlaufen werden, dann ist es ein Problem. Es soll in jedem Fall so sein, dass pictureBox1 zuerst, danach pictureBix2 etc. gefüllt werden soll. Und nicht pictureBix10, dann pictureBox4, dann pictureBox20.

Obwohl ich denke gerade, dass ich das dann über das Parsen der Name Property der pictureBox lösen können müsste, indem ich die entsprechende Zahl am Ende isoliere und dieser dann das entsprechende Bild der ArrayList zuordne. Es sollen nur soviele PictureBox-Controls gefüllt werden, wie Bilder in der ArrayList sind, und eben immer "von vorne", also beginnedn mit pictureBox1.

Gruss
dietbeck

3.511 Beiträge seit 2005
vor 14 Jahren

Die Controls liegen in der Reiehnfolge vor, wie sie erstellt wurden. Wenn du also 10 PictureBoxes auf ein Control hinzufügst, und du dann per foreach rüber läufst, kannst du sicher sein, das die richtige Reihenfolge eingehalten wird.

Zu deinem anderen Problem: [FAQ] Variablennamen zur Laufzeit zusammensetzen

[Edit]
Achja, ab 3.5 geht das ganze auch etwas einfacher mit


IEnumerable<PictureBox> pictureBoxes = Controls.OfType<PictureBox>();
foreach (PictureBox pictureBox in pictureBoxes.OrderBy(p => p.Name))
{

}

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)