Ändern eines Objekts deren Name durch eine Variable beschrieben wird

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Freedbob.

    Ändern eines Objekts deren Name durch eine Variable beschrieben wird

    Hey,

    zuerstmal bin ich ein blutiger Anfänger was VB angeht und lese desshalb seit Tagen nur noch in Foren wie man dies und das tut.
    Jetzt hänge ich allerdings an einem Problem an dem ich nicht weiß wonach ich suchen soll.

    Ich möchte folgendes machen bzw mein Projekt sieht wie folgt aus:

    Links 6 Vierecke mit unterschiedlichen Farben und Rechts 10 Vierecke deren Farbe verändert werden soll. Es soll auf eines der Linken Vierecke gecklickt werden was bewirkt das in einer Variablen(Name: Farbe) die Farbe steht welche das Viereck hat.(funtioniert alles)Jetzt soll man auf eines der 10 rechten Vierecke klicken wonach das die gleiche Farbe annimt welche in der Farbe - Variable steht!(funktioniert auch! vil zu umständlich?)


    (Feld_1_1_1 ist der Name des 1. Viereck von den 10 rechten)

    VB.NET-Quellcode

    1. Private Sub Feld_1_1_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Feld_1_1_1.Click
    2. If Farbe = "Aus" Then
    3. Feld_1_1_1.BackColor = Color.Silver
    4. Else
    5. If Farbe = "Weiß" Then
    6. Feld_1_1_1.BackColor = Color.White
    7. Else
    8. If Farbe = "Rot" Then
    9. Feld_1_1_1.BackColor = Color.Red
    10. Else
    11. If Farbe = "Grün" Then
    12. Feld_1_1_1.BackColor = Color.Lime
    13. Else
    14. If Farbe = "Blau" Then
    15. Feld_1_1_1.BackColor = Color.Blue
    16. Else
    17. If Farbe = "Magenta" Then
    18. Feld_1_1_1.BackColor = Color.Magenta
    19. Else
    20. If Farbe = "Cyan" Then
    21. Feld_1_1_1.BackColor = Color.Cyan
    22. Else
    23. If Farbe = "Gelb" Then
    24. Feld_1_1_1.BackColor = Color.Yellow
    25. End If
    26. End If
    27. End If
    28. End If
    29. End If
    30. End If
    31. End If
    32. End If
    33. End Sub


    So das funktioniert auch alles nur möchte ich das eben für alle 10 Vierecke bzw später für 64 machen und jedesmal das obige zu schreiben ist doch sehr umständlich. Ich wollte jetzt einfach anstatt Feld1_1_1 eine Variable einfügen und praktisch eine "Unterfunktion"(Heißt das so in VB?) machen. Das ich also nur noch machen muss bei jedem Feld:

    VB.NET-Quellcode

    1. Private Sub Feld_1_1_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Feld_1_1_1.Click
    2. Variable = "Feld_1_1_1"
    3. 'und jetzt irgendwie die Funktion aufrufen die eben die Farbe des Feldes Ändert was in der Variable (in dem fall eben Feld_1_1_1) steht
    4. End Sub


    Ohgott ich hoffe ich konnte es wenigsten etwas verständlich erklären...aber wie gesagt ich weiß nicht wie das heißt sonst hätte ich es ja auch schon gesucht.

    Würde mich freuen wenn jemand verstanden hat was ich meine:-)
    verwende hierfür Select Case:

    VB.NET-Quellcode

    1. Select Case Farbe
    2. Case "Rot"
    3. CType(sender,DERTYP).BackColor = Color.Red
    4. Case "Weiß"
    5. CType(sender,DERTYP).BackColor = Color.White
    6. End Select

    DERTYP ist wahrscheinlich "PictureBox"...
    so wie ich das jetzt geschrieben habe, musst du diesen Code nur noch in eine Methode Packen...

    VB.NET-Quellcode

    1. Private Sub Felder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Feld1.Click,Feld2.Click, Feld3.Click '...und so weiter
    2. 'hier der Code rein...
    3. End Sub

    und dann brauchst du das ganze nur einmal für alle 10 PictureBoxen ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Perfekt danke! Genau das habe ich gesucht das mit dem "CType(sender, Label)" das mit dem Case und so japs daran hab ich einfach nicht gedacht ist aber vieeeel eleganter^^ also danke:-) super schnelles Forum hier!! :thumbsup:


    jetzt tut sich mir allerdings eine weitere Frage auf! Ich dache eigendlich nach dem obigen könnte ich das alleine lösen allerdings habe ich den obigen Lösungsweg nicht erwartet^^ Also mein Code sieht mittlerweile so aus:

    VB.NET-Quellcode

    1. Private Sub Felder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Feld_1_1_1.Click, Feld_1_1_2.Click, Feld_1_1_3.Click, Feld_1_1_4.Click
    2. Select Case Farbe
    3. Case "Weiß"
    4. CType(sender, Label).BackColor = Color.White
    5. Case "Aus"
    6. CType(sender, Label).BackColor = Color.Silver
    7. Case "Rot"
    8. CType(sender, Label).BackColor = Color.Red
    9. Case "Grün"
    10. CType(sender, Label).BackColor = Color.Lime
    11. Case "Blau"
    12. CType(sender, Label).BackColor = Color.Blue
    13. Case "Gelb"
    14. CType(sender, Label).BackColor = Color.Yellow
    15. Case "Magenta"
    16. CType(sender, Label).BackColor = Color.Magenta
    17. Case "Cyan"
    18. CType(sender, Label).BackColor = Color.Cyan
    19. End Select
    20. End Sub


    Ich möchte allerdings zusätzlich jehweils eine Variable für jedes Viereck der 10 Rechten haben in der immer der momentane Zustand gespeichert ist! Ich dachte an ein Feld(10) nur wie sag ich jetzt in welchem Feld ich das speichern will...? Ich glaube mit Feldern wird das mit dieser Lösung schwierig?? ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Freedbob“ ()

    Naja das ganze soll mal ein Steuerprogramm für einen LED Cube werden und im Hintergrund soll ständig der Zustand von 64 Variablen (momentan nur 10 zu Testzwecken) an den Atmel übertragen werden. Desshalb möchte ich ständig den Zustand aller LED's in jehweils einer Variable gespeichert haben und eben nicht mehrmals pro Sekunde den Zustand abfragen! Außerdem währe es sinnvoll wenn diese Variablen alle in einem Feld währen: Feld(3,3,3) also hätte ich doch insgesammt 64 Variabeln begonnen mit Feld(0,0,0) dann Feld(0,0,1)... oder?