Übungsaufgabe FlipFlop

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

Es gibt 62 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    EDIT:
    Den ganzen Code nochmals überarbeitet.
    Bezeichnungen geändert, Zähler geändert usw.. Bin offen für weitere Verbesserungen.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_lauflicht
    2. Dim btn_switch As Boolean = False
    3. Dim abort As Boolean
    4. Dim backward As Boolean
    5. Dim zaehler As Integer
    6. Dim start As Integer = 0
    7. Dim ende As Integer = 5
    8. Private Sub frm_lauflicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    9. settings()
    10. End Sub
    11. Private Sub Timer1_Tick(Timer As Object, e As EventArgs) Handles Timer1.Tick
    12. If abort Then Exit Sub
    13. If backward Then
    14. If zaehler = ende Then Me.Controls("Panel" & ende).BackColor = Color.Red
    15. Dim x As Integer = zaehler
    16. zaehler = zaehler - 1
    17. If x = start Then backward = False
    18. Me.Controls("Panel" & x).BackColor = Color.Red
    19. If x > start And x <> ende Then Me.Controls("Panel" & x + 1).BackColor = Color.Maroon
    20. If x = start Then Me.Controls("Panel" & start + 1).BackColor = Color.Maroon
    21. If x = start Then backward = False : zaehler = start
    22. Else
    23. Dim y As Integer = zaehler
    24. zaehler = zaehler + 1
    25. Me.Controls("Panel" & y).BackColor = Color.Red
    26. If y > start Then Me.Controls("Panel" & y - 1).BackColor = Color.Maroon
    27. If y = ende Then backward = True : zaehler = ende
    28. End If
    29. End Sub
    30. Private Sub on_off(ByVal switcher As Boolean)
    31. If btn_switch Then
    32. abort = False
    33. btn_start.BackColor = Color.Red
    34. '//'Checkbox deaktiviert
    35. 'If Not cb_l2r.Checked Then zaehler = start
    36. Timer1.Start()
    37. Else
    38. Timer1.Dispose()
    39. abort = True
    40. btn_start.BackColor = Color.Green
    41. settings()
    42. End If
    43. End Sub
    44. Private Sub settings()
    45. 'Checkbox deaktiviert
    46. cb_l2r.Enabled = False
    47. For Each PN In Me.Controls.OfType(Of Panel)()
    48. PN.BackColor = Color.Maroon
    49. Next
    50. Timer1.Interval = 200
    51. zaehler = start '<==nur wenn CB disabled!!
    52. End Sub
    53. Private Sub btn_start_Click(slastLEDr As Object, e As EventArgs) Handles btn_start.Click
    54. btn_switch = Not btn_switch
    55. on_off(btn_switch)
    56. End Sub
    57. 'Checkbox deaktiviert
    58. Private Sub cb_l2r_CheckedChanged(sender As Object, e As EventArgs) Handles cb_l2r.CheckedChanged
    59. settings() : zaehler = ende : backward = True
    60. End Sub
    61. End Class

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Da fehlt Dir m.E. noch dezent das Feingefühl.
    • eine Sub-Methode soll etwas machen, daher sollte ihr Name einen Befehl darstellen, also ReaktiviereStartButton, BeendeProgramm, LadeDateiRunter. Aber settings und on_off sind … komisch unkonkret
    • der Parameter bei on_off namens switcher wird überhaupt nicht verwendet, also hinfort damit
    • btn_switch ist ein Boolean mit komischem Namen, da dieser Name nicht erkennen lässt, wofür diese Variable sein soll
    • Die wiederkehrenden Controlzugriffe über den Controlnamen ist auf Dauer gefährlich, weil Du Deinen Code an Namen bindest, die man aber ändern können muss. Fasse die Panels in einer List(Of Panel) zusammen und Du kannst sie sogar per Index ansprechen.
    • Timer1.Dispose()? Was soll das bewirken? Dispose ist grundsätzlich ein diese-Komponente-wird-nun-entsorgt-Befehl!
    Vielleicht hab ich die Muße, mal eine Alternative zu coden …
    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.
    Fasse die Panels in einer List(Of Panel) zusammen und Du kannst sie sogar per Index ansprechen.
    Das versuche ich gerade.
    Hatte das ja erst so: ​Dim panels() As Integer = New Integer() {1, 2, 3, 4, 5, 6} begonnen. Brachte mir kein erfolg. Jetzt lese ich gerade über ListOf..
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Damit fasst Du ja nicht die Panels zusammen, sondern quasi irgendwelche Zahlen.
    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.
    So habe nun den Nachmittag damit verbracht etwas im Web über ListOf zu finden. Überall wird entweder nur mit Strings gearbeitet oder es wird gezeigt wie ich Labels / Textboxen erstellen kann. Ich habe nicht gefunden was ich brauche um die Liste auszulesen usw... Ich glaube ich bin zu blöd um richtig zu suchern ;(
    Habe dann erstmal alles unnütze aus dem Code raus.
    Mein Ergebnis bis jetzt. Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Im Einzelschritt ist i 1

    VB.NET-Quellcode

    1. Dim ende As Integer
    2. Dim LED As New List(Of Panel) From {Panel1, Panel2, Panel3, Panel4, Panel5, Panel6}
    3. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    4. ende = LED.Count - 1
    5. For i As Integer = 0 To ende
    6. i = i + 1
    7. LED(i).Name = "Panel" & i.ToString '<==Hier flieg ich gleich raus.
    8. LED.Item(i).BackColor = Color.Red
    9. Next
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. Timer1.Start()
    13. End Sub
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Na der Anfang ist doch gar nicht mal so schlecht. Nur Zeile#10 kannste Dir schenken. Es geht eben darum, dass Du nix mit den Namen machen sollst. Aber hier benennst Du die Panels um. Willste nicht, brauchste nicht.
    Und: die For-Schleife ändert doch selber schon i. Warum mit i = i + 1 da noch nachtreten und Dich selber ins Verderben stürzen? Hinfort damit.
    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.
    Hi
    Das i = i + 1 deshalb, weil das erste i aus der schleife ja 0 ist und das erste Panel ja Panel1

    Denke ich wieder falsch?
    Wie mache ich denn nun weiter? Hab nichts gefunden wie ich nun anders als ich angefangen habe die Panels halt zu ändern.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Mit i = i + 1 erhöhst Du aber mit jedem Schleifendurchgang i. Erster Durchgang: i = 1, 2. Durchgang i = 3, dann i = 5, i = 7, …
    Wenn Du mit 1 anfangen willst, dann schreib das doch auch: For i As Integer = 1 To ende

    ##########

    @Amelie (hier hab ich die Anredefunktion verwendet, damit Du informiert wirst, dass ich den Post noch nachbearbeitet habe):
    hier meine Version:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private backward As Boolean
    2. Private zaehler As Integer
    3. Private Panels As List(Of Panel) = Nothing
    4. Private Sub frm_lauflicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. PrepareLeds()
    6. ResetLedLights()
    7. End Sub
    8. Private Sub PrepareLeds()
    9. Panels = New List(Of Panel) From {Panel0, Panel1, Panel2, Panel3, Panel4, Panel5}
    10. End Sub
    11. Private Sub ResetLedLights()
    12. Panels.ForEach(Sub(x) x.BackColor = Color.Maroon)
    13. zaehler = 0
    14. End Sub
    15. Private Sub TmrLedBlinking_Tick(Timer As Object, e As EventArgs) Handles TmrLedBlinking.Tick
    16. Panels.ForEach(Sub(x) x.BackColor = Color.Maroon)
    17. Panels(zaehler).BackColor = Color.Red
    18. 'entweder
    19. If backward Then
    20. zaehler -= 1
    21. Else
    22. zaehler += 1
    23. End If
    24. 'oder: zaehler += If(backward, -1, 1)
    25. If zaehler = 0 OrElse zaehler = Panels.Count - 1 Then backward = Not backward
    26. End Sub
    27. Private Sub btn_start_Click(sender As Object, e As EventArgs) Handles btn_start.Click
    28. If Not TmrLedBlinking.Enabled Then
    29. btn_start.BackColor = Color.Red
    30. TmrLedBlinking.Start()
    31. Else
    32. btn_start.BackColor = Color.Green
    33. TmrLedBlinking.Stop()
    34. ResetLedLights()
    35. End If
    36. End Sub
    37. Private Sub ChbStartBackwards_CheckedChanged(sender As Object, e As EventArgs) Handles ChbStartBackwards.CheckedChanged
    38. ResetLedLights()
    39. SetLedStartDirection()
    40. End Sub
    41. Private Sub SetLedStartDirection()
    42. backward = ChbStartBackwards.Checked
    43. 'entweder
    44. If ChbStartBackwards.Checked Then
    45. zaehler = Panels.Count - 1
    46. Else
    47. zaehler = 0
    48. End If
    49. 'oder: zaehler = If(ChbStartBackwards.Checked, Panels.Count - 1, 0)
    50. End Sub


    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.

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

    OK, das schaut ja ganz anders aus.
    Werde ich mal studieren. ;)

    @VaporiZed
    Edit:

    Also habe mir deinen Code jetzt mal genauer angesehen.
    Einige Fragen:
    1.) Siehe Bild; woher kommt diese Zahl? Weiter ==> Frage 4

    2.) 'oder: zaehler += If(backward, -1, 1) Das verstehe ich nicht.

    3.) Panels.ForEach(Sub(x) x. Die (Sub(x) .. ist die ListOf???

    4.) Woher wies der Code nun welches LED wieder von Rot auf Maroon gesetzt werden muss?

    VB.NET-Quellcode

    1. Panels.ForEach(Sub(x) x.BackColor = Color.Maroon)
    2. Panels(zaehler).BackColor = Color.Red


    Finde es aber trotzdem so erstaunlich das, obgleich dein Code so anders als meiner ist, beide das gleiche machen und wenn ich mal gugge, habe ich nicht viel mehr code gebraucht.
    Aber ich sehe das mein Code viel zu unübersichtlich und die ganzen IF abfragen verwirrend sind.


    EDIT 08:34

    Es werden quasi immer alle erst wieder ausgeschaltet? Trotzdem verwirrt mich diese Zahl

    EDIT 09:50
    Habe meinen Code etwas angepasst was das ein und ausschalten der LEDs betrifft. Nur um zu sehen ob das so klappt ;)
    Frage mich jetzt warum ich da nicht drauf gekommen bin und es mir soooo schwer mit den ganzen ​IF Abfragen gemacht habe?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(Timer As Object, e As EventArgs) Handles Timer1.Tick
    2. If abort Then Exit Sub
    3. If backward Then
    4. Dim x As Integer = zaehler
    5. zaehler = zaehler - 1
    6. If x = start Then backward = False
    7. LEDsoff()
    8. Me.Controls("Panel" & x).BackColor = Color.Red
    9. If x = start Then backward = False : zaehler = start
    10. Else
    11. Dim y As Integer = zaehler
    12. zaehler = zaehler + 1
    13. LEDsoff()
    14. Me.Controls("Panel" & y).BackColor = Color.Red
    15. If y = ende Then backward = True : zaehler = ende
    16. End If
    17. End Sub
    18. Private Sub LEDsoff()
    19. For Each PN In Me.Controls.OfType(Of Panel)()
    20. PN.BackColor = Color.Maroon
    21. Next
    22. End Sub
    Bilder
    • lauflicht-1.jpg

      215,56 kB, 699×300, 55 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Diese Zahl 804 ist verwirrend, korrekt. Würdest Du schreiben: Panels.ForEach(Sub(Halleluja) Halleluja.BackColor = Color.Maroon), würde keine 804 angezeigt werden, sondern gar nix. Wie Du die Variable nennst, ist egal.
    • Panels.ForEach(Sub(x) x.BackColor = Color.Maroon)
    • Panels.ForEach(Sub(Panel) Panel.BackColor = Color.Maroon)
    • Panels.ForEach(Sub(Halleluja) Halleluja.BackColor = Color.Maroon)
    Alles gleich. Wichtig ist nur, dass in der Klammer bei Sub der gleiche Begriff verwendet wird wie vor .BackColor =
    Wenn man jetzt aber x schreibt (ich bevorzuge es einfach) und außerhalb dieser Zeile nen Haltepunkt setzt und versucht den Wert von x anzeigen zu lassen, indem man mit der Maus draufgeht, versucht der Compiler das x zu interpretieren und einen Wert anzuzeigen, was aber total Blödsinn ist, weil das eigentliche x da gar nicht mehr existiert. Aber der Compiler findet ein x. Nämlich welches? Das Form hat eine X-Variable: den linken Fensterabstand zum Bildschirmrand. Der beträgt bei Dir 804 Pixel. Das hat aber inhaltlich überhaupt nix mit der genannten Zeile zu tun. Daher zurecht für Dich verwirrend.
    Zur Zeile selbst: Das Such-Stichwort für Dich heißt LINQ. Das geht so:

    VB.NET-Quellcode

    1. Panels.ForEach(Sub(x) x.BackColor = Color.Maroon)
    Bedeutet: »Compiler, nimm die Variable Panels her, die eine Gruppe von Panels ist, und führe diesen ForEach-Kram durch. Das heißt: Führe für jedes Element in dieser Panelmenge eine bestimmte Sache aus, nämlich das, was nach ForEach in Klammern steht.« Damit man nun sagen kann, was genau mit jedem Panel geschehen soll, gibt es diese Variable x oder Panel oder Halleluja oder wie Du sie nennen willst. Mit der greifst Du auf das Einzelpanel zu und kannst sagen, was damit geschehen soll, hier also: Setzen der BackColor. Wie kannst Du unterscheiden, um welches Panel es geht: Gar nicht. Darum geht es ja auch. Der Compiler soll es ja mit allen Panels in der Gruppe tun. Daher ist eine Unterscheidung gar nicht notwendig. Es soll einfach im gesamten heißen: Compiler, führe für jedes Element in der Gruppe Panels eine Aktion aus, nämlich: setze "für jedes einzelne" (ForEach) die BackColor.

    Antwort auf Frage 2: Man kann meinen Code an der Stelle entweder ausführlich schreiben (das ist der "entweder"-Teil) oder kurz (der "oder"-Teil). Wenn Dich letzterer verwirrt, ignoriere ihn. Er besagt folgendes:
    zaehler += If(backward, -1, 1): »Addiere zu dem Wert von zaehler etwas, nämlich: Wenn (If) backward True ist (Vergleiche von Booleans mit True sind redundant, von daher brauch ich sogar nur backward an der Stelle zu schreiben), Dann addiere -1, Sonst addiere 1.«
    Ein anderes, fiktives Beispiel:
    Dim MeinPlanFürHeute = If(TemperaturInGradCelsius > 25, BadenGehen, BuchLesen)
    "Wenn es wärmer als 25 °C ist, Dann baden gehen, Sonst Buch lesen"
    oder allgemein: Ergebnis = If(Bedingung, ErgebniswertWennBedingungWahrIst, ErgebniswertWennBedingungFalschIst)

    Frage 3 ist m.E. beantwortet

    zu Frage 4: Ich setze alle LEDs/Panels zuerst auf Maroon und gleich danach das Panel, welches durch zaehler-Index momentan "dran ist" auf Red. Ich mach es mir also leicht und versuche nicht zu ermitteln, welches Panel vorher Red war, damit ich es auf Maroon setzen kann, ich setz einfach alle auf Maroon.

    Edit 8:34: Ja und siehe oben

    Edit 9:50: Du arbeitest ja immer noch mit Control-Namen. Ich nicht. Ich nehm einfach die Panels-Gruppe und zaehler. Mehr braucht es nicht. Und ich kann die Panels umbenennen wie ich will. Das kannst Du nicht, weil Du mit Me.Controls("Panel" & y) immer an die Namen "appellierst". Benennst Du ein Panel um, crasht Dein Code an solch einer Stelle.
    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.

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

    OK
    Einiges ist mir jetzt klarer geworden. Bissel sacken lassen. ;)

    Vorallem das: Panels.ForEach(Sub(x) x.BackColor = Color.Maroon)

    Bzgl. Meines Codes. Ja ich möchte den so nach und nach umbauen. Dann verstehe ich alles besser.
    Habe jetzt z.B. nochmal den Abschnitt im TimerTick ändern und drastisch ( unsinnigen ) Code reduzieren können.

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(Timer As Object, e As EventArgs) Handles Timer1.Tick
    2. If abort Then Exit Sub
    3. Dim x As Integer = zaehler
    4. If backward Then
    5. zaehler = zaehler - 1
    6. LEDsoff()
    7. Me.Controls("Panel" & x).BackColor = Color.Red
    8. If x = start Then backward = False : zaehler = start
    9. Else
    10. zaehler = zaehler + 1
    11. LEDsoff()
    12. Me.Controls("Panel" & x).BackColor = Color.Red
    13. If x = ende Then backward = True : zaehler = ende
    14. End If
    15. End Sub



    Edit 11:20

    Also wäre das:

    VB.NET-Quellcode

    1. Panels.ForEach(Sub(x) x.BackColor = Color.Maroon)

    quasi die kurze Version von dem:

    VB.NET-Quellcode

    1. Private Sub LEDs_off()
    2. For Each PN In Me.Controls.OfType(Of Panel)()
    3. PN.BackColor = Color.Maroon
    4. Next
    5. End Sub

    Mit dem Unterschied, das bei meiner Version alle auf dem Form befindlichen Panels neu eingefärbt würden.

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    So habe noch etwas gelernt und neues umgesetzt.


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_lauflicht
    2. Dim abort As Boolean
    3. Dim backward As Boolean
    4. Dim zaehler As Integer
    5. Dim newCol As Integer
    6. Dim start As Integer = 0
    7. Dim LED_Leiste As List(Of Panel) = Nothing
    8. Dim LED_Colors As List(Of Color) = Nothing
    9. Private Sub ListofLEDs()
    10. LED_Leiste = New List(Of Panel) From {Panel0, Panel1, Panel2, Panel3, Panel4, Panel5, Panel6}
    11. End Sub
    12. Private Sub ListofColors()
    13. LED_Colors = New List(Of Color) From {Color.Red, Color.Lime, Color.DodgerBlue, Color.Magenta, Color.Orange, Color.SpringGreen, Color.Yellow}
    14. End Sub
    15. Private Sub createRandomColor()
    16. Dim Random As New Random
    17. newCol = Random.Next(0, LED_Colors.Count)
    18. End Sub
    19. Private Sub reset_leds()
    20. LED_Leiste.ForEach(Sub(led) led.BackColor = Color.DimGray)
    21. LED_Leiste.ForEach(Sub(led) led.BorderStyle = BorderStyle.None)
    22. End Sub
    23. Private Sub frm_lauflicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    24. cb_Start_Direction.Enabled = False 'Checkbox deaktiviert
    25. ListofLEDs() : ListofColors() : reset_leds()
    26. End Sub
    27. Private Sub Timer1_Tick(Timer As Object, e As EventArgs) Handles Timer1.Tick
    28. If abort Then Exit Sub
    29. Dim ledNr As Integer = zaehler ' für mich besser als nur ein x oder f oder whatever
    30. reset_leds()
    31. 'createRandomColor() 'Jedes LED einzeln neu färben
    32. LED_Leiste(ledNr).BackColor = LED_Colors(newCol)
    33. If backward Then
    34. zaehler = zaehler - 1
    35. If ledNr = start Then backward = False : zaehler = start : createRandomColor()
    36. Else
    37. zaehler = zaehler + 1
    38. If ledNr = LED_Leiste.Count - 1 Then backward = True : zaehler = LED_Leiste.Count - 1 : createRandomColor()
    39. End If
    40. End Sub
    41. Private Sub btn_start_Click(slastLEDr As Object, e As EventArgs) Handles btn_start.Click
    42. If Not Timer1.Enabled Then
    43. abort = False
    44. btn_start.BackColor = Color.Red
    45. Timer1.Start()
    46. Else
    47. abort = True
    48. Timer1.Stop()
    49. btn_start.BackColor = Color.Green
    50. reset_leds()
    51. End If
    52. End Sub
    53. Private Sub cb_Start_Direction_CheckedChanged(sender As Object, e As EventArgs) Handles cb_Start_Direction.CheckedChanged
    54. ListofLEDs() : ListofColors() '<= Hier nötig wenn die CB im Designer schon Checked auf True gesetzt ist
    55. If Not cb_Start_Direction.Checked Then
    56. zaehler = start
    57. backward = True
    58. Else
    59. zaehler = LED_Leiste.Count - 1
    60. End If
    61. End Sub
    62. Private Sub Num_Interval_ValueChanged(sender As Object, e As EventArgs) Handles Num_Interval.ValueChanged
    63. Timer1.Interval = CInt(Num_Interval.Value) 'Während der Laufzeit einstellbar
    64. End Sub
    65. End Class

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    moin moin

    Danke @ErfinderDesRades ; mir wäre es lieber das ich erstmal selber etwas code was dann ggf von dir oder anderen verbessert wird.
    Ich baue dann auf dem letzen code auf.
    Bzgl. zip/rar ich benutze 7Zip oder wenns ;) ganz schnall gehen soll einfach das Wineigene zip.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    naja - ich zumindest werde deine Async-Versuche nicht verbessern.
    Dieses Problem mit Async zu lösen ist absolut verblüffend einfach. Ich kann mir nicht vorstellen, dass du da drauf kommst, ohne dass man es dir zeigt.
    Du kannst also jetzt noch ein paar Tage in wahrscheinlich vergeblicher Eigenarbeit zubringen, und mich dann machen lassen, oder du lässt mich gleich machen.
    Du kannst natürlich dein projekt auch garnet uppen, dann mach ich auch nix.
    Jetzt arbeitest Du ja gar nicht mehr mit einem System.Windows.Forms.Timer (den man im Designer auf's Form zieht), sondern mit einem System.Timers.Timer. Nuja.
    Der NumericUpDown-Wert wird gar nicht verwendet, das Timer-Intervall bleibt immer bei 90 ms.
    Zu jedem AddHandler muss es auch ein RemoveHandler geben. Bevor Du also den Timer disposed, schreibe: RemoveHandler LEDTimer.Elapsed, AddressOf LEDTimer_Tick
    In der LEDTimer_Tick-Methode führst Du die Variable ledNr ein, die exakt das gleiche wie zaehler ist. Entsorgst das lokale ledNr und benutzt entweder nur zaehler oder benenne in der ganzen Klasse zaehler in ledNr um.
    zaehler = zaehler - 1 -> zaehler -= 1
    zaehler = zaehler + 1 -> zaehler += 1
    Falls Du vorhast, start bei 0 zu belassen, entsorge start.

    Das hier geht zwar:

    VB.NET-Quellcode

    1. LED_Leiste.ForEach(Sub(led) led.BackColor = Color.DimGray)
    2. LED_Leiste.ForEach(Sub(led) led.BorderStyle = BorderStyle.None)
    das geht aber auch z.B. so, falls gewollt:

    VB.NET-Quellcode

    1. LED_Leiste.ForEach(Sub(led)
    2. led.BackColor = Color.DimGray
    3. led.BorderStyle = BorderStyle.None
    4. End Sub)
    oder:

    VB.NET-Quellcode

    1. Private Sub reset_leds()
    2. LED_Leiste.ForEach(Sub(led) PreparePanel(led))
    3. End Sub
    4. Private Sub PreparePanel(led As Panel)
    5. led.BackColor = Color.DimGray
    6. led.BorderStyle = BorderStyle.None
    7. End Sub


    createRandomColor() und reset_leds() sind passende Sub-Namen, da sie konkrete Anweisungen nennen. ListofLEDs() und ListofColors() erfüllen dieses Kriterium nicht.
    Du solltest die Zeile Dim Random As New Random aus createRandomColor() rausholen, ansonsten wird überflüssigerweise bei jeder neuen Farbgebung ein neuer Zufallsgenerator erzeugt.

    Stoppt man den Verlauf bei der 1. "Hinrunde", wird beim Fortsetzen immer die gleiche Farbe wiederverwendet. Stoppt man den Verlauf bei der "Rückrunde", wird beim Fortsetzen das erste Panel mit der alten Farbe gezeigt, dann dessen Farbe gewechselt und erst dann läuft das Lichtspiel weiter.
    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.

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