Problem mit Sourcecodewiederholungen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Problem mit Sourcecodewiederholungen

    Hallo.

    Vorerst möchte ich sagen, dass ich noch ein ziemlicher Anfänger bin, also wenn ihr nicht genau versteht was ich versuche zu erklären, fragt einfach nochmal nach ;)

    Ich möchte mit VB 2008 Schiffe versenken programmieren.(unten ist ein Bild vom "Grundriss")
    Ich habe jetzt noch nicht sehr viel gemacht, denn ich bin auf ein Problem gestoßen.

    Ich habe als erstes ziemlich mühsam die einzelnen Felder(Panels)nach den jeweiligen Feld benannt (z.B. erstes Feld links oben heißt Panel1a, rechts daneben Panel1b, usw...) Das war schon ziemlich aufwendig.
    Ich habe daraufhin eine Testprozedur gemacht ob auch alles passt:

    Quellcode

    1. Panel1a.BackColor = Color.White 'Reihe 1
    2. Panel1b.BackColor = Color.White
    3. Panel1c.BackColor = Color.White
    4. Panel1d.BackColor = Color.White
    5. Panel1e.BackColor = Color.White
    6. Panel1f.BackColor = Color.White
    7. Panel1g.BackColor = Color.White
    8. Panel1h.BackColor = Color.White
    9. Panel1i.BackColor = Color.White
    10. Panel1j.BackColor = Color.White
    11. Panel2a.BackColor = Color.White 'Reihe 2
    12. Panel2b.BackColor = Color.White
    13. Panel2c.BackColor = Color.White
    14. Panel2d.BackColor = Color.White
    15. Panel2e.BackColor = Color.White
    16. Panel2f.BackColor = Color.White
    17. Panel2g.BackColor = Color.White
    18. Panel2h.BackColor = Color.White
    19. Panel2i.BackColor = Color.White
    20. Panel2j.BackColor = Color.White
    21. ...

    Diese soll alle Panels weiß färben. Klappt auch soweit.
    Wegen der übersichtlichkeit habe ich den Rest hier weggelassen. Hier bin ich eigentliches Problem gestoßen:
    Wie kann man diese Wiederholungen vermeiden, also immer
    Panel1b.BackColor = Color.White
    Panel1c.BackColor = Color.White
    Panel1d.BackColor = Color.White
    zuschreiben geht zwar mit Copy&Paste aber es geht doch auch bestimmt anders.
    z.b. panel1a,1b,3b,... .Backcolor = Color.White - oder so ähnlich, halt in möglichst wenig Zeilen.
    Das ist erstmal nicht so wichtig.

    Ich würde gern wissen wie man das bei Prozeduren macht.

    Ich will es so programmieren, dass wenn man auf ein Feld(Panel) klickt, der Feldname in die Variable "feld" geschrieben wird, sodass man jederzeit aufrufen kann, auf welches Feld man geklickt hat. Wenn ich diesen Quellcode(wieder der Einfachkeit wegen gekürzt) so weiterschreiben wollte müsste ich da ja 300(!) Zeilen schreiben und das würde Stunden dauern.

    Quellcode

    1. Private Sub Panel1a_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1a.Click
    2. feld = "A1"
    3. End Sub
    4. Private Sub Panel1b_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1b.Click
    5. feld = "B1"
    6. End Sub
    7. ....

    Ich suche also nach einer Möglichkeit ohne diese Wiederholugen
    Private Sub Panel1a_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1a.Click
    feld = "A1"
    End Sub

    Private Sub
    Panel1b_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1b.Click
    feld =
    "B1"
    End Sub


    Kann mir da jmd weiterhelfen?
    Hoffe das das jmd verstanden hat, um was es geht ;)

    Danke schonmal.

    Pack Dir die Spielfelder in ein 2-Dimensionales Array:

    VB.NET-Quellcode

    1. Private MySpielfeld(,) As Label = {{Label1, Label2}, {Label3, Label4}}

    dann kannst Du über 2 Schleifen bequem drauf zugreifen.

    VB.NET-Quellcode

    1. For x As Integer = 0 To 1
    2. For y As Integer = 0 To 1
    3. ' etwas tun
    4. Next
    5. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke erstmal für die Antwort, hat mir schon ein bisschen geholfen.

    Was muss ich in die geschweiften Klammern reinschreiben, dass ich z.B. das Panel1a mit spielfeld(0,0) ansprechen kann, das Panel2a mit spielfeld(1,0), Panel1b mit spielfeld(0,1) usw?
    lg

    shadow321 schrieb:

    Was muss ich in die geschweiften Klammern reinschreiben

    VB.NET-Quellcode

    1. Private MySpielfeld(,) As Label = {{Panel1a, Panel1b}, {Panel2a, Panel2b}}

    Du musst dann bei den Schleifen über alle 1. btw. 2. Indizes die Zeilen- und Spalten-Zuordnung ausprobieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!