Wie modelliere ich eine Straßenampelsteuerung?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 169 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Wie modelliere ich eine Straßenampelsteuerung?

    OK
    Ich habe auf Youtube eine Ampelsteuerung gesehen. Sehr einfach. 3 Bilder die Quasi mittels Button weitergeschaltet werden.
    Nun habe ich mir folgendes überlegt:

    Projekt in VB.Net 2012: Komplexe Ampelsteuerung.
    Grundfunktion:
    Kreuzung Hauptstrasse / Nebenstrasse mit Fußgängerampeln.Die Ampelanlage soll eine Störungsschaltung besitzen.
    Bei Behebung einer Störung, welche durch einen Schalter simuliert wird soll die Ampel in einen Neustart geschaltet werden.
    Die Ampelsteuerung wir mittels PictureBoxen ( je Ampel eine ) dargestellt.( Bilder sind vorhanden )

    Störung simuliert:
    Alle Autoampeln haben gelbes Blinklicht, Fußgängerampeln sind aus.

    Neustart:
    Hauptstrasse ==> Autos grün ==> Fußgänger rot
    Nebenstrasse ==> Autos rot ==> Fußgänger grün
    Nach voreingestellter Zeit schalten die Ampel von gelben blinken auf grün für Hauptstrasse .. usw.
    Nach voreingestellter Zeit schalte die Anlage von rot auf grün für die Nebenstrasse und rot für die Hauptstraße.

    Zusatzfunktion in Erweiterungen:
    Fußgänger bekommen einen Anforderungsschalter.
    Die verschiedenen Zeiten werden über ein Supportfenster regelbar sein.

    Soweit meine Idee. Vielleicht besser einen neuen Threat aufzumachen????
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Huiuiui - das ist aber ziemlich massiv!
    Mir fehlt zunächstmal die Beschreibung der Normal-Funktion: Was sind die Vorgänge, wenn die Ampelsteuerung normal arbeitet?
    Dann erwähnst du Haupt- und Nebenstrassen - dafür musst du auch ein Datenmodell schaffen, denn ohne Strassen kann man ja gar keine Ampeln aufstellen, die zu steuern wären.

    (Aber ich muss zugeben, ich weiss jetzt selbst nicht, ob ich mich im Lastenheft befinde oder schon im Pflichtenheft. "Datenmodell" ist ja schon eine Vorgehensweise, wie man sowas (Ampelsteuerung) anfasst.)

    Also noch Schritt zurück: Deine Ampeln musst du aufstellen: Wo? Gibt es Strassen in deiner Welt?

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

    @ErfinderDesRades

    Normal arbeiten wie nach Neustart.
    Datenmodel für die Strasse?? Das verstehe ich nicht.

    Bildanhang was ich im Designer angelegt habe. Jede Ampel hat einen eindeutigen Namen erhalten sowie die beiden Bottoms.

    Jetzt müßte ich doch ggf Klassen oder Module anlegen worin die Funktionen welche die "Ampeln" steuern liegen?
    Bilder
    • Ampel im designer.jpg

      151,38 kB, 826×756, 212 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Im elektrotechnischen Sinn Astabile Kippstufe, T-Flipflop und Transistoren

    Hier gibt es schön 'was zu lesen.

    mikrocontroller.net/topic/489682#new
    Man beachte auch das Bild
    mikrocontroller.net/attachment/445160/Ampel1.GIF
    Edit: Ich will damit sagen, dass es einen Taktgeber geben muss (sieht man auch im Diagramm), um jeweils einen Transistor zum Durchschalten / Nicht-Durchschalten zu bringen. Heute macht man es zwar alles mit einem Programm (µProzessor), aber vielleicht solltest du trotzdem die RC-Zeitkonstanten einbauen, um "richtige Elektronik" nachzusimulieren.
    Oder ein Fehler in der Elektronik ist eine Störung (z.B. eine Spannungsspitze löst etwas aus).

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Bartosz“ ()

    Gegenfrage: Wie realitätsgetreu soll denn das Ganze werden? Mach mal (für Dich) ne detaillierte Beschreibung des Ablaufs. Daraus ergeben sich meist automatisch einzeln zu lösende Probleme. Ok, hast Du ja schon teilweise in Post#11

    Amelie schrieb:

    Bei Behebung einer Störung, welche durch einen Schalter simuliert wird
    Was ist hier für Dich ein Schalter? Ein Button auf nem Form? Ein Gerät, welches Du am Computer betätigst? Ein Schalter an einer Ampel vor Deiner Wohnung?
    Welche Relevanz haben für Dein Programm Haupt- und Nebenstraßen? Ist die Einteilung für Dein Programm relevant?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Amelie schrieb:

    Datenmodel für die Strasse?? Das verstehe ich nicht.
    Verstehst du "Datenmodell für die Ampeln"?
    wie kanns du dann "Datenmodell für die Strassen" nicht verstehen?
    Ich sehe zwei Strassen auf deim Bildle.
    In meiner Welt werden Ampeln an Strassen aufgestellt. Je nachdem, wo an der Strassenkreuzung du eine Ampel hinstellst muss sie ja spezifisch angesteuert werden.
    @Amelie: Vielleicht eine alternative Antwort: Mit Datenmodellierung ist gemeint, dass Du (erst z.B. mit Stift+Papier, später mit Code) genau die Eigenschaften einer Sache beschreibst. Welche Dinge sind für die Sache in Deinem Programm relevant? Muss man wissen, wie groß die Ampel ist, wie schnell sie umschaltet, welche Signalfarben sie hat, wer der Hersteller ist? Eine Ampel hat so viele Eigenschaften in der Realität. Aber welche davon sind für Dein Programm wichtig? Welches Verhalten willst Du der Ampel verpassen? Genauso mit Straße oder anderen Objekten in Deinem Programm. Aber bedenke: Ein anderes Ampel-Straßen-Programm braucht ggf. ein anderes Datenmodell, weil andere Dinge dort wichtig sein könnten, die hier unwichtig sind.

    ##########

    Und nicht gleich mit Timern oder so denken, das ist schon zu weit (in die falsche Richtung) gedacht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZednullAlso soll schon so real wie möglich sein, deswegen auch eine Haupt,- und Nebenstrasse.Bin gerade dabei zu ermitteln wie viele Timer ich für die einzelnen Ampelphasen etc brauche. Der Störung und Startschalter sind Buttons auf der Form.

    ​Und nicht gleich mit Timern oder so denken, das ist schon zu weit (in die falsche Richtung) gedacht.

    Sondern???

    @Bartosz
    ähmm das ist Elektrik ... hihihi kann ich nix mit anfangen aber werde den Text mal lesen!!

    bzgl Datenmodel:
    Ja das habe ich jetzt verstanden was Ihr meint und danach ja das Teil im Designer kreiert. Das ist nun mein Ampelmodel für diese Straßen.
    Habe aufgeschrieben was meine Ampel hier in diesem Model machen soll.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    @Amelie Was ich sagen wollte, ist: Eigentlich besteht eine Ampel aus Elektronik. Dass du sie nun in einem Programm nachbaust, ist etwas anderes. Aber da du explizit Störungen einbauen möchtest, warum dann keine Elektronikstörung.. so dachte ich das. Kurz erläutert: In elektrischen Schaltungen sind beispielsweise RC-Tiefpässe drin. Das bedeutet kurzum, dass kurzfristige Störungen (z.B. Spannungsspitzen im Netz) keine negativen Auswirkungen auf das Verhalten der Schaltung haben, was definitiv gut ist!
    Eine zweite Sache: Verpass der Ampel Glühbirnen statt LED – der Nostalgie wegen. Diese Glühbirnen leuchten nicht sofort 100%ig hell, sondern brauchen 500 Millisekunden.
    Aber das klären wir später. Ab jetzt halte ich mich wieder raus, du brauchst erstmal ein Datenmodell, und lasse die anderen machen ^^
    Denn, auch wenn ich keine Ahnung vom Thema habe, eine Ampel kennt ihre Taktung nicht. Sie bekommt sie von außen zugesandt. Wie alle anderen Ampeln (an der Kreuzung) auch. Es kommt ja kein Techniker bei Störungen vorbei und fummelt an allen Ampeln rum, um sie in den Gelb-Blink-Modus zu versetzen. Also: Datenmodell nochmal überdenken.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Amelie Da stellen wir uns mal ganz dumm.
    Eine einzelne Ampel zu steuern und noch eine und noch eine ist eines, das ist ganz simpel:
    Rot => Rot+Gelb => Grün => Gelb => Rot (glaub ich).
    Und dann noch der grüne Pfeil und der Fußgänger-Knopf und die Straßenbahn-Bus-Vorrangschaltung.
    Eine Kreuzung zu steuern (initial mal ohne Störung) ist eigentlich nicht viel mehr
    (vertikal: die Ampeln 1 und 2, horizontal die Ampeln 3 und 4):
    Wenn Ampel 1 und 2 grün oder gelb sind, sind Ampeln 3 und 4 rot und umgekehrt.
    usw. usw.
    Jedenfalls ist klar, dass sich eine Kreuzung ampelmäßig nur in einer sehr geringen Anzahl verschiedener Zustände befinden kann.
    Für Ablauf schreibst Du zunächst auf, was alles berücksichtigt und was (zunächst) nicht berücksichtigt werden soll (Fußgänger-Knopf, Straßenbahn).
    Diese kannst Du alle numerieren und für jeden Zustand die Farben aller Ampeln sowie die Dauer festlegen und die Überspringbarkeit.
    Dann nimmst Du einen sinnvollen Timer (1 Sekunde sollte reichen) und zählst im Tick-Event die Zustände hoch, wobei einzelne Zustände übersprungen werden können, schaltest alle Ampeln und setzt die Dauer des nächsten Zyklus.
    Der 1-Sekunden-Takt ist dann für externe Eingriffe nötig (Fußgänger-Knopf, Straßenbahn), das kommt dann in der nächsten Version.
    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!
    Also ich habe nun mit vielem versucht.
    List of, Picture Array usw... klappt alles nicht ...

    Die Klasse mit den Funktionen.

    VB.NET-Quellcode

    1. Public Class steuerclass
    2. Public Shared pbx As PictureBox
    3. Public Shared Sub stoerung(ByVal simulate As Integer)
    4. frm_main.tm_störr.Start()
    5. Dim i As Integer = 0
    6. For i = 0 To 7
    7. pbx = CType(frm_main.Controls("pb_gelb" & i.ToString), PictureBox)
    8. MessageBox.Show("pb_gelb" & i.ToString) ' Hier ist es Richtig kommt aber nicht in frm_main an sondern NUR Bild Nr. 7 blinkt.
    9. Next
    10. End Sub
    11. '...
    12. '......
    13. End Class


    Im frm_main Mache ich es nun so: Jede PictureBox einzeln...weil es anders nicht geht. So blinken halt alle... nicht schön aber..

    VB.NET-Quellcode

    1. Private Sub tm_störr_Tick(sender As Object, e As EventArgs) Handles tm_störr.Tick
    2. pb_gelb0.Visible = Not pb_gelb0.Visible
    3. pb_gelb1.Visible = Not pb_gelb1.Visible
    4. pb_gelb2.Visible = Not pb_gelb2.Visible
    5. pb_gelb3.Visible = Not pb_gelb3.Visible
    6. pb_gelb4.Visible = Not pb_gelb4.Visible
    7. pb_gelb5.Visible = Not pb_gelb5.Visible
    8. pb_gelb6.Visible = Not pb_gelb6.Visible
    9. pb_gelb7.Visible = Not pb_gelb7.Visible
    10. End Sub


    Benötige mal eine Hilfe warum es nicht ghet und ob es überhaupt anders geht.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    VB.NET-Quellcode

    1. Public Shared Sub stoerung(ByVal simulate As Integer)
    Nimm da mal das Shared weg.
    Wolltest Du nicht erst mal ohne Code beschreiben, was passieren soll?
    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!
    Hey
    Die Beschreibung steht doch ganz oben... ?(

    Ohne das
    Shared
    gehts aber nicht. ?(

    Warum geht das nicht? Fehlermeldung End of erwartet. Nur in elichen Beispielen um PictureBoxen in ein Array zu packen sehe ich das genau so immer wieder ?(

    VB.NET-Quellcode

    1. Dim fussgrünHaupt As New PictureBox(){pb_grünf0, pb_grünf1}


    Fehler: Deklaration erwartet...

    VB.NET-Quellcode

    1. ​Dim fussgrünHaupt() As PictureBox
    2. fussgrünHaupt As New PictureBox(){pb_grünf0, pb_grünf1}
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Probierma

    VB.NET-Quellcode

    1. Dim fussgrünHaupt As New PictureBox() = {pb_grünf0, pb_grünf1}
    Die Bilder kannst Du, so sie als Datei vorliegen, alle in die Ressourcden packen.
    Und:
    Die Beschreibung ganz oben hat wenig mit dem Code von Post #13 zu tun.
    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!
    Die Bilder sind in den Resourcen.
    Der erste Teil von Post 13 funktioniert ja nicht, im 2ten Teil blinken die gelben Lampen der Ampeln ja so wie in der Beschreibung bei einer simulierten Störung durch klick auf einen Button.

    Meine Frage: wie kann ich nun einzelnen PictureBoxen zusammen fassen um nicht jede einzeln ansprechen zu müßen. Ich dacjhte dafür ist ein Array nützlich? ?(
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Benötige mal eine Hilfe warum es nicht ghet und ob es überhaupt anders geht.
    So geht es nicht, es geht - wenn überhaupt - ganz anders.
    Die Beschreibung (alias "Lastenheft", alias "was?") ist völlig unzureichend, und vom Pflichtenheft (alias "wie und womit?") fehlt jede Spur.

    Ins Lastenheft würde ich etwa sowas schreiben:

    Lastenheft schrieb:

    Es gibt eine Kreuzung, an der Ampeln aufgestellt werden. Die Ampeln werden an eine zentrale Steuerung angeschlossen, die die Signalierung so schaltet, dass der Verkehr kollisionsfrei fliessen kann.
    (Es darf gerne genauer sein: Wo werden die Ampeln aufgestellt, verschiedene Ampel-Typen, in welche Richtung blicken die Ampeln, welche Signale gibt es, welche Regeln gewährleisten kollisionsfreien Verkehr, etc...)

    Gäbe es ein Pflichtenheft täte ich sagen:

    Pflichtenheft schrieb:

    Ein Datenmodell muss konzipiert und erstellt werden.
    Man muss Standorte definieren können, Ampeln, Signal-Arten, Schalt-Zustände des Systems.
    Ein Timer soll die System-Schaltzustände im Kreislauf durchschalten, und dabei den aktuellen System-Schaltzustand im Gui visualisieren.
    Es darf gerne genauer sein, sogar viel genauer ...
    Hi,

    ich hab heute morgen nur die erste Post kurz überflogen und meine Kurz-Variante erstellt. Also nur 2 Ampeln eine Hauptstr. und eine Nebenstr. verschaltet. Die anderen zwei sind dann ja "nur" Kopien davon. Ich hab dazu ein Winforms-BenutzerSteuererelemnt benutzt und dort dann Panele (glaub ich) als AmpelLampen. Das könnten dann aber auch Picturboxes etrc. sein wie man will.

    Form1 C# (leider)

    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. namespace WF_AmpelKreuzungSim
    11. {
    12. public partial class Form1 : Form
    13. {
    14. bool AmpelTimerTickToggle = true;
    15. bool AmpelNormalBetrieb = true;
    16. int NormalBetriebCounter = 0;
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. AmpelHauptStrasse.SetAmpelStrassenName("HauptStr");
    21. AmpelNebenStrasse.SetAmpelStrassenName("NebenStr");
    22. AmpelTimer.Start();
    23. }
    24. public void ResetAndStartAmpel()
    25. {
    26. AmpelNormalBetrieb = true;
    27. }
    28. private void AmpelTimer_Tick(object sender, EventArgs e)
    29. {
    30. AmpelTimerTickToggle = !AmpelTimerTickToggle;
    31. if (AmpelNormalBetrieb == true)
    32. {
    33. NormalBetrieb();
    34. }
    35. if (AmpelNormalBetrieb == false)
    36. {
    37. BlinkBetrieb();
    38. }
    39. }
    40. private void NormalBetrieb()
    41. {
    42. NormalBetriebCounter += 1;
    43. switch (true)
    44. {
    45. case true when NormalBetriebCounter < 5:
    46. AmpelHauptStrasse.AutoAmpelGruen();
    47. AmpelHauptStrasse.FussAmpelRot();
    48. AmpelNebenStrasse.AutoAmpelRot();
    49. AmpelNebenStrasse.FussAmpelGruen();
    50. break;
    51. case true when NormalBetriebCounter >= 5 && NormalBetriebCounter < 8:
    52. AmpelHauptStrasse.AutoAmpelGelb();
    53. AmpelHauptStrasse.FussAmpelRot();
    54. AmpelNebenStrasse.AutoAmpelRot();
    55. AmpelNebenStrasse.FussAmpelGelb();
    56. break;
    57. case true when NormalBetriebCounter == 9 :
    58. AmpelHauptStrasse.AutoAmpelRot();
    59. AmpelHauptStrasse.FussAmpelRotGelb();
    60. AmpelNebenStrasse.AutoAmpelRotGelb();
    61. AmpelNebenStrasse.FussAmpelRot();
    62. break;
    63. case true when NormalBetriebCounter > 9 && NormalBetriebCounter < 14:
    64. AmpelHauptStrasse.AutoAmpelRot();
    65. AmpelHauptStrasse.FussAmpelGruen();
    66. AmpelNebenStrasse.AutoAmpelGruen();
    67. AmpelNebenStrasse.FussAmpelRot();
    68. break;
    69. case true when NormalBetriebCounter > 14 && NormalBetriebCounter < 18 :
    70. AmpelHauptStrasse.AutoAmpelRot();
    71. AmpelHauptStrasse.FussAmpelGelb();
    72. AmpelNebenStrasse.AutoAmpelGelb();
    73. AmpelNebenStrasse.FussAmpelRot();
    74. break;
    75. case true when NormalBetriebCounter == 18:
    76. AmpelHauptStrasse.AutoAmpelRotGelb();
    77. AmpelHauptStrasse.FussAmpelRot();
    78. AmpelNebenStrasse.AutoAmpelRot();
    79. AmpelNebenStrasse.FussAmpelRotGelb();
    80. NormalBetriebCounter = -1;
    81. break;
    82. }
    83. }
    84. private void BlinkBetrieb()
    85. {
    86. AmpelHauptStrasse.AutoAmpelGelb();
    87. if (AmpelTimerTickToggle)
    88. {
    89. AmpelHauptStrasse.AutoAmpelAus();
    90. }
    91. AmpelHauptStrasse.FussAmpelAus();
    92. AmpelNebenStrasse.AutoAmpelGelb();
    93. if (AmpelTimerTickToggle)
    94. {
    95. AmpelNebenStrasse.AutoAmpelAus();
    96. }
    97. AmpelNebenStrasse.FussAmpelAus();
    98. }
    99. private void BtnStoerung_Click(object sender, EventArgs e)
    100. {
    101. AmpelNormalBetrieb = false;
    102. }
    103. private void BtnStart_Click(object sender, EventArgs e)
    104. {
    105. AmpelNormalBetrieb = true;
    106. }
    107. }
    108. }


    und der Code des Steuerelements Ampel:
    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. namespace WF_AmpelKreuzungSim
    11. {
    12. public partial class Ampel : UserControl
    13. {
    14. public Ampel()
    15. {
    16. InitializeComponent();
    17. }
    18. //AmpelName
    19. public void SetAmpelStrassenName(string name)
    20. {
    21. GrpbxStrasse.Text = name;
    22. }
    23. //AutoAmpel
    24. public Color Rot { get; } = Color.Red;
    25. public Color Gelb { get; } = Color.Yellow;
    26. public Color Gruen { get; } = Color.Green;
    27. public Color Aus { get; } = Color.DarkGray;
    28. public void AutoAmpelGruen()
    29. {
    30. AutoRot.BackColor = Aus;
    31. AutoGelb.BackColor = Aus;
    32. AutoGruen.BackColor = Gruen;
    33. }
    34. public void AutoAmpelGelb()
    35. {
    36. AutoRot.BackColor = Aus;
    37. AutoGelb.BackColor = Gelb;
    38. AutoGruen.BackColor = Aus;
    39. }
    40. public void AutoAmpelRot()
    41. {
    42. AutoRot.BackColor = Rot;
    43. AutoGelb.BackColor = Aus;
    44. AutoGruen.BackColor = Aus;
    45. }
    46. public void AutoAmpelRotGelb()
    47. {
    48. AutoRot.BackColor = Rot;
    49. AutoGelb.BackColor = Gelb;
    50. AutoGruen.BackColor = Aus;
    51. }
    52. //AmpelKombo Ausgeschaltet (Störung)
    53. public void AutoAmpelAus()
    54. {
    55. AutoRot.BackColor = Aus;
    56. AutoGelb.BackColor = Aus;
    57. AutoGruen.BackColor = Aus;
    58. }
    59. public void FussAmpelAus()
    60. {
    61. FussRot.BackColor = Aus;
    62. FussGelb.BackColor = Aus;
    63. FussGruen.BackColor = Aus;
    64. }
    65. //FussgängerAmpel
    66. public void FussAmpelGruen()
    67. {
    68. FussRot.BackColor = Aus;
    69. FussGelb.BackColor = Aus;
    70. FussGruen.BackColor = Gruen;
    71. }
    72. public void FussAmpelGelb()
    73. {
    74. FussRot.BackColor = Aus;
    75. FussGelb.BackColor = Gelb;
    76. FussGruen.BackColor = Aus;
    77. }
    78. public void FussAmpelRot()
    79. {
    80. FussRot.BackColor = Rot;
    81. FussGelb.BackColor = Aus;
    82. FussGruen.BackColor = Aus;
    83. }
    84. public void FussAmpelRotGelb()
    85. {
    86. FussRot.BackColor = Rot;
    87. FussGelb.BackColor = Gelb;
    88. FussGruen.BackColor = Aus;
    89. }
    90. }
    91. }


    Hier noch ein .gif ... alles natürlich noch verbesserungswürdig aber proof of Conecpt :)

    Bilder
    • vbAmpel.gif

      482,68 kB, 322×440, 147 mal angesehen
    codewars.com Rank: 4 kyu

    Amelie schrieb:

    wie kann ich nun einzelnen PictureBoxen zusammen
    Mach Dir ein UserControl mit 3 PictureBoxen.
    Enumeriere die möglichen Ampelphasen und sage dem UserControl, welche Phase es darstellen soll.
    Weise den PictureBoxen im UserControl je nach Phase die entsprechenden Images zu.
    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!