Frage von J0h4ann3s, 60

C# Elemente via String benennen?

Ich arbeite gerade an einem kleinen Spiel in Windows Forms,
es geht darum mit Buttons Farben zu ändern, die ist ja nicht schwierig.
Ich möchte aber auch, dass die Farben der anliegenden Felder geändert werden und wollte fragen ob es möglich ist, ein Element (in diesem Fall ein Panel mit dem Namen "LED_11") so anzusteuern, dass sich der Name des Elementes aus einem String zusammensetzt?
Würde mich über eine Antwort freuen.

Antwort
von triopasi, 38

Ich glaube das geht schon, ist aber n seehrr schlechtes Konzept.

Zu erst ein mal sollte dein Spielfeldzustans nicht durch die Buttonfarbe gegeben sein sondern zB durch ein Array im Hintergrund.

Dann wäre es sinnvoll die Buttons in ein Array zu schreiben, dann kannst du zB mit buttons[0, 0] auf das Button oben links zugreifen.

Kommentar von Palladin007 ,

Nein geht nicht und ein schlechter Stil ist deine Variante auch :P

Der beste Stil wäre durch DataBinding möglich.
Im Hintergrund arbeitet eine eigene kleine Mini-Engine (Controller), die für jeden Button ein Objekt und dessen Eigenschaften hat (Model). Die Controls in der UI koppeln sich via DataBinding an ihr jeweiliges representatives Objekt, was von der Engine kommt. Passiert etwas, werden die WinForms-Buttons (View) automatisch durch das DataBinding geändert.

Das ist mit WPF aber einfacher und für den Anfang für ein kleines Projekt oder zur Übung nicht unbedingt notwendig, denn wer dem MVC-Pattern (Model View Controller) folgt (das habe ich eben sehr sehr grob umschrieben) hat in der Regel auch deutlich mehr Code drum herum. Profitieren tut man davon, wenn das Projekt größer ist, lange verwendet oder gewartet werden soll oder ein Team daran arbeitet.

Kommentar von triopasi ,

Ja ich weiss dass meines auch nicht der allertollste Code ist.. Aber die Spielfelddaten über die Buttonfarben zu definieren ist noch viel schlechter. Und mein Code erreicht das was der Fragesteller will recht einfach (man kann sehr leicht auf die umliegenden Buttons zugreifen!) Außerdem is der Fragesteller ja Anfänger, da muss er ja nicht gleich mit MVC anfangen xD

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten