ampel erstellen (probleme mit code)

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von FAtheone.

    ampel erstellen (probleme mit code)

    hi ich brauche mal etwas unterstütung. ich habe ein programm entworfen das eine ampel darstellen soll.
    soweit läuft es auch nur mein problem ist das bei mir keine grün phase erscheint.wo habe ich den fehler in meinem code?

    der code:

    VB.NET-Quellcode

    1. Private Sub btnWeiter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWeiter.Click
    2. If lblgrün.BackColor = Color.Green Then
    3. lblgelb.BackColor = lblrot.BackColor
    4. ElseIf lblgelb.BackColor = Color.Yellow Then
    5. lblrot.BackColor = lblgrün.BackColor
    6. ElseIf lblrot.BackColor = Color.Red Then
    7. lblgelb.BackColor = Color.Yellow
    8. ElseIf lblgelb.BackColor = Color.yellow Then
    9. lblgelb.BackColor = lblrot.BackColor
    10. Else
    11. lblrot.BackColor = Color.Red
    12. End If
    13. End Sub
    14. End Class


    hab schon etwas länger ausprobiert aber ich bekomme die grün phase nicht hin der ablauf:

    1. rot
    2. rot/gelb
    3.gelb
    dann passiert nichts mehr obwohl es grün werden sollte.

    danke im vorraus.
    mfg
    Sicher ? ... geh mal im Kopf durch :

    ' ich gehe hier von aus das die LabelNamen der Farbe entsprechen

    1. lblRot = Rot; lblGruen = Grün; lblGelb = Geld
    2. lblRot = Rot; lblGruen = Grün; lblGelb = Rot

    mehr passiert nicht

    geh ich davon aus dass alle Schwarz sind:
    1. lblRot = Schwarz; lblGruen = Schwarz; lblGelb = Schwarz
    2. lblRot = Rot; lblGruen = Schwarz; lblGelb = Schwarz
    3. lblRot = Rot; lblGruen = Schwarz; lblGelb = Gelb
    4. lblRot = Schwarz; lblGruen = Schwarz; lblGelb = Gelb

    mehr passiert nicht, da du 2 mal Gelb abfragst und schon die 1. Gelbabfrage dran kommt ... aber du willst ja wissen in dem 1. Fall ob Gelb gelb ist und Rot rot ... da musst du die beiden If-Abfragen verbessern bzw. sich auch auf Grün und Rot sich beziehen lassen
    Elgeanter mit State-Enum:

    VB.NET-Quellcode

    1. Public Enum AmpelState As Integer
    2. Off
    3. Green
    4. Yellow
    5. Red
    6. RedYellow
    7. End Enum
    8. Dim currState As AmpelState = AmpelState.Off
    9. Public Sub RefreshLights()
    10. Select Case currState
    11. Case AmpelState.Off
    12. 'Alle Grau
    13. 'etc. pp.
    14. End Select
    15. End Sub
    16. 'Timer:
    17. If currState = RedYellow Then
    18. currState = Green
    19. Else
    20. currState += 1
    21. End If
    ... Naja ... eleganter ... es ist lesbarer ;) ... ich hätte de Ampelstates noch spezifische Nummern gegeben und den Timer einfach : currState = (currState Mod 5) + 1
    Lesbarer = Eleganter.

    Die Nummern sind default:

    Er (= der Compiler) fängt bei 0 an und addiert immer 1
    also:

    Off = 0
    Green = 1
    Yellow = 2
    usw...

    Wie du siehst auch currState += 1
    bei mir wird im normalen Zyklus halt noch AmpelState.Off übersprungen.
    ok, dass der Compiler das auch macht wusst ich nicht ^^
    bei mir doch auch

    VB.NET-Quellcode

    1. currState = (currState + 1) Mod (AmpelState.RedYellow + 1) ' mit Off
    2. currState = (currState Mod AmpelState.RedYellow) + 1' ohne Off

    MSDN schrieb:

    Eine Enumeration ist eine benannte Konstante, deren zugrunde liegender Typ jeder beliebige ganzzahliger Typ außer Char sein kann. Wenn kein zugrunde liegender Typ explizit deklariert wurde, wird Int32 verwendet.

    Byte, Int16 aka Short, Int32 aka Integer, Decimal (, Int64 aka Long)