Übungsaufgabe FlipFlop

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

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

    Moin moin

    ​System.Timers.Timer habe ich nun benutzt, weil ich gelesen habe das der im vergleich zu dem anderen asyncron bzw in einem extra Task läuft, was ein "einfrieren" verhindern soll..???
    Habe da erstmal den NumericUp weggelassen.

    ListofLEDs() und ListofColors() erfüllen dieses Kriterium nicht. Nicht, warum nicht??

    Das mit der ledNr habe ich gemacht, weil es für mich einfach ist das nachzuvollziehen. Wenn da überall zähler oder was auch immer steht verwirrt mich das.
    OK, das mit dem Random macht Sinn.
    Das mit dem Farbwechsel ist mir so garnicht aufgefallen.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    warum nicht?
    Weil ein Sub-Name mit einem Verb beginnen sollte, damit ein Imperativ/Befehlssatz in der gesprochenen Sprache (deutsch/englisch) rauskommt. List ist zwar (auch) ein englisches Verb, dann ergibt aber der Sub-Name keinen Sinn. ListOfLEDs würde ich mit "LED-Liste" übersetzen. Oder (eine) Liste von LEDs. Das ist kein Befehl. Ein Befehlssatz im Deutschen wäre "Erstelle eine LED-Liste" -> CreateListOfLEDs. Oder "Liste mir LEDs auf". Aber letzteres führt 1. im Englischen m.E. (!) zu Verwirrung (ListLEDs), weil man dann nicht mehr sagen kann, ob List nun ein Verb oder ein Substantiv ist. Zum anderen wird der Name dem Inhalt der Methode nicht mehr ganz gerecht. Es wird eine Liste erstellt oder befüllt, also Dinge zusammengesammelt. Ich würde das persönlich nicht als "auflisten" bezeichnen. Ein Auflisten verbinde ich mit der Anzeige derselbigen.
    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.
    BitteSehr.

    Der bahnbrechende Code:

    VB.NET-Quellcode

    1. Public Class frm_lauflicht
    2. Private LED_Leiste As List(Of Panel) = Nothing
    3. Private LED_Colors As Color() = {Color.Red, Color.Lime, Color.DodgerBlue, Color.Magenta, Color.Orange, Color.SpringGreen, Color.Yellow}
    4. Private Random As New Random
    5. Private _IsRunning As Boolean = False
    6. Public Property IsRunning() As Boolean
    7. Get
    8. Return _IsRunning
    9. End Get
    10. Set(ByVal value As Boolean)
    11. If _IsRunning = value Then Return
    12. _IsRunning = value
    13. btn_OnOff.BackColor = If(_IsRunning, Color.Red, Color.Green)
    14. If _IsRunning Then Run()
    15. End Set
    16. End Property
    17. Private Sub btn_OnOff_Click(sender As Object, e As EventArgs) Handles btn_OnOff.Click
    18. IsRunning = Not IsRunning
    19. End Sub
    20. Private Async Sub Run()
    21. Dim iPnl = 0
    22. Dim stp = 1
    23. Do ' Endlos-Schleife
    24. Dim col = LED_Colors(Random.Next(0, LED_Colors.Length))
    25. For i = 0 To LED_Leiste.Count - 2
    26. 'innere Schleife: Ein Durchlauf - je nach stp vorwärts oder rückwärts
    27. LED_Leiste(iPnl).BackColor = col ' färben
    28. Await Task.Delay(200)
    29. LED_Leiste(iPnl).BackColor = Color.DimGray ' entfärben
    30. If Not IsRunning Then Exit Do ' Abbruch
    31. iPnl += stp
    32. Next
    33. stp = -stp ' Richtungswechsel
    34. Loop
    35. End Sub
    36. Private Sub frm_lauflicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    37. LED_Leiste = New List(Of Panel) From {Panel0, Panel1, Panel2, Panel3, Panel4, Panel5, Panel6}
    38. End Sub
    39. End Class


    oder noch besser:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_lauflicht
    2. Private _IsRunning As Boolean = False
    3. Private Property IsRunning() As Boolean
    4. Get
    5. Return _IsRunning
    6. End Get
    7. Set(ByVal value As Boolean)
    8. If _IsRunning = value Then Return
    9. _IsRunning = value
    10. btn_OnOff.BackColor = If(_IsRunning, Color.Red, Color.Green)
    11. If _IsRunning Then Run()
    12. End Set
    13. End Property
    14. Private Sub btn_OnOff_Click(sender As Object, e As EventArgs) Handles btn_OnOff.Click
    15. IsRunning = Not IsRunning
    16. End Sub
    17. Private Async Sub Run()
    18. Dim LED_Leiste = {Panel0, Panel1, Panel2, Panel3, Panel4, Panel5, Panel6}
    19. Dim LED_Colors = {Color.Red, Color.Lime, Color.DodgerBlue, Color.Magenta, Color.Orange, Color.SpringGreen, Color.Yellow}
    20. Dim rnd As New Random
    21. Dim iPnl = 0
    22. Dim stp = 1
    23. Do ' Endlos-Schleife
    24. Dim col = LED_Colors(rnd.Next(0, LED_Colors.Length))
    25. For i = 0 To LED_Leiste.Length - 2
    26. 'läuft je nach stp vorwärts oder rückwärts
    27. LED_Leiste(iPnl).BackColor = col ' färben
    28. Await Task.Delay(200)
    29. LED_Leiste(iPnl).BackColor = Color.DimGray ' entfärben
    30. If Not IsRunning Then Exit Do ' Abbruch
    31. iPnl += stp
    32. Next
    33. stp = -stp ' Richtungswechsel
    34. Loop
    35. End Sub
    36. End Class
    Dateien
    • Lauflicht00.zip

      (13,05 kB, 55 mal heruntergeladen, zuletzt: )

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

    OK. wieder gaaaaanz anders ;)
    Mit dem ​System.Timers.Timer lag ich also falsch?
    Muss mir jetzt gleich mal dein Code genauer ansehen was da im einzelnen passiert aber auf den ersten Blick :)

    Danke für die Mühe

    Habe da gleich mal eine Frage:
    Kann man mit einem Timer oder einem Task.Delay je nachdem was ich verwende ohne viel Aufwand etwas aus einer ListOf auslesen.
    Beispiel:

    VB.NET-Quellcode

    1. ​Dim LED_Leiste = {Panel0, Panel1, Panel2, Panel3, Panel4, Panel5, Panel6}

    Panel1 nach 2 Sekunden, dann nach weiteren 4 Sekunden Panel2 usw....

    Ich denke ich muss die TimeTicks irgendwie zählen, dann den Zwischenstand irgendwo speichern und am Ende der ListOf alles wieder auf NUll...???
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Der Async/Await-Ansatz ist vom Timer-Ansatz grundverschieden.
    Wenn du den Code mal anguckst: Timer kommen da nicht mehr vor.
    Man kann nicht unbedingt sagen "Mit Timer liegst du falsch" - sondern es ist ein anderer Ansatz.
    (Aber man kann sagen mit System.Timers.Timer liegst du falsch, weil dessen Tick kommt im NebenThread raus, was norrmalerweise im Gui Probleme macht. Nun zufällig nicht - ich weiss auch nicht, warum man eine BackColor scheinbar nebenläufig ändern darf - alle möglichen anderen Control-Properties quittieren sowas mit einer InvalidOperation-Exception.
    Also wenn Timer dann den WinForms.Timer)

    Mittels Await Task.Delay(200) ist einfach eine Ausführungs-Pause gecodet, in einer Schleife, die andernfalls mit irrsinniger Geschwindigkeit durchrasen würde.

    Ist eine Besonderheit von Async/Await, dass damit geht, was Anfänger normalerweise mit Thread.Sleep() versuchen (was nicht geht).

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

    OK Habe ich verstanden.
    EDIT:
    @ErfinderDesRades @VaporiZed

    So habe noch einige "gelernt" und dann mal ein altes Übungsproject neu umgesetzt.


    EDIT 17:08
    Kleine Verbesserungen habe ich noch gemacht aber noch nicht neu hochgeladen.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    @VaporiZed

    Hallo

    Eine Frage zu meiner Abfrage. Zeiten werden in 2 MaskTb eingegeben. Eine Abfrage für ein Zeitraum zum Beispiel: 17:00 - 18:00 Uhr.

    Die erste Bedingung If NZb >= CDate(TB_NZbegin.Text) funktioniert.
    Die zweite Bedingung Or NZe >= CDate(TB_NZende.Text) nicht.
    Egal ob mit OrElse / And oder AndAlso.
    Wo lieg denn da der Fehler?

    VB.NET-Quellcode

    1. Dim MyDate As Date = Date.Now
    2. Dim NZb As DateTime 'Begin
    3. Dim NZe As DateTime 'Ende
    4. NZb = CDate(MyDate.ToString("HH:mm:ss"))
    5. NZe = CDate(MyDate.ToString("HH:mm:ss"))
    6. If NZb >= CDate(TB_NZbegin.Text) Or NZe >= CDate(TB_NZende.Text) Then NZ = True
    7. If NachtBetrieb = True And NZ = True Then
    8. Betriebsphase = "Nachtphase"
    9. phaseNacht()
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Setz einen Haltepunkt in Zeile#7 und zeig (nicht klicken) mit der Maus auf NZe. Dann siehst Du den sich ergebenden Wert für NZe und weißt, was schiefläuft.

    btw: NZb, NZe? Wenn Du selber schon einen Kommentar schreiben musst, um zu wissen, was das bedeutet, solltest Du die Variablen entsprechend (um)benennen.
    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.
    Moin moin

    Bzgl der Kommis im Code habe ich nur wegen des Forums gemacht.

    Verstehe diese Logik nicht. Habe nun eine Funktion von @petaod gefunden aber die macht auch nicht das was ich möchte.
    In den beiden TB gebe ich meine Zeiten ein und NZ soll nur True sein wenn die Uhrzeit zwischen diesen liegt.
    Jetzt verhält es sich so das entweder der Linke Teil oder der Rechte Teil des AndAlso / OrElse ausgefürht wird. Kopfraucht.
    Return RefTime > StartTime AndAlso RefTime < EndTime besagt doch:

    Wenn Uhrzeit größer als StartTime und Uhrzeit kleiner als EndTime dann True ???

    StartTime: 09:45 EndTime 09:46
    Bei 09:45 wurde es True aber bei 09:46 / 09:47 war es immer noch True

    EDIT Code 11:10Uhr
    So funktioniert das nun.

    ​Return RefTime >= StartTime AndAlso RefTime <= EndTime Aber das passt doch von der Logik nicht; zumindest von meiner Kopfraucht

    VB.NET-Quellcode

    1. Function IsInTime(ByVal StartTimestamp As String, ByVal EndTimestamp As String) As Boolean
    2. Dim StartTime, EndTime, RefTime As DateTime
    3. RefTime = DateTime.Now
    4. If DateTime.TryParse(StartTimestamp, StartTime) AndAlso DateTime.TryParse(EndTimestamp, EndTime) Then
    5. If StartTime > EndTime Then
    6. If RefTime > StartTime Then EndTime = EndTime.AddDays(1) Else StartTime = StartTime.AddDays(-1)
    7. End If
    8. Return RefTime >= StartTime AndAlso RefTime <= EndTime
    9. End If
    10. Return False
    11. End Function
    12. Private Sub Timer_Ampelphasen_Tick(sender As Object, e As EventArgs) Handles Timer_Ampelphasen.Tick
    13. ........
    14. ..
    15. If IsInTime(CStr(TB_NZbegin.Text), CStr(TB_NZende.Text)) AndAlso CB_nachtbetrieb.Checked Then
    16. Betriebsphase = "Nachtphase"
    17. phaseNacht()
    18. Else
    19. ........
    20. ....
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Schade. Hättest Du mal gemacht, worum ich Dich gebeten habe was ich vorgeschlagen habe, hättest Du gesehen, dass das Datum falsch ist und deswegen der Datumsvergleich scheitert.
    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.
    ​Schade. Hättest Du mal gemacht,

    Das habe ich und ich habs nicht kappiert warum das nicht klappte.
    Habe auch nicht verstanden warum das Return RefTime >= StartTime AndAlso RefTime <= EndTime nun funktioniert.
    RefTime <= EndTime ist doch KLEINER als???
    und als Beispiel 11:10 ist doch größer als 11:09
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    ok, der bisherige Text war Blödsinn von mir. Mein Fehler. Tut mir leid.

    ##########

    RefTime = Jetzt, also 11:42
    StartTime = 11:30
    EndTime = 11:50
    -> RefTime liegt zwischen StartTime und EndTime. Dann passt doch der Vergleich RefTime >= StartTime AndAlso RefTime <= EndTime
    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“ ()

    ​der bisherige Text war
    Kein Problem.
    Ich "befolge" immer wenn jemand Tips gibt nur leider... siehe meine Sig..
    -----------------
    Ich bin immer davon ausgegangen, das dass Result aus dem Vergleich größer sein muss, so meine Logik.

    Das mit dem And / AndAlso und Or / OrElse macht mir auch noch Kopfzerbrechen..
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Ich bin immer davon ausgegangen, das dass Result aus dem Vergleich größer sein muss
    Größer als was?

    Amelie schrieb:

    Das mit dem And / AndAlso und Or / OrElse macht mir auch noch Kopfzerbrechen..
    Inwieweit?
    AndAlso und OrElse können doch quasi so auch im Deutschen verwendet werden: Wenn ich hungrig bin und nichts zu essen habe, dann kaufe ich ein -> IF IAmHungry AndAlso FoodAtHome Is Nothing* Then IBuyFood.
    Ich kaufe also nur ein, wenn beide Bedingungen zutreffen, sonst nicht.
    oder
    Wenn ich müde bin oder erschöpft, dann geh ich schlafen -> If IAmTired OrElse IHaveNoEnergy Then IGoToSleep*. Ich geh also ins Bett, wenn mindestens eine Bedingung zutrifft, sonst eben nicht.

    *nur sinngemäße Übersetzungen ;)
    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“ ()

    Ich versuchs auch noch kurz. ist nähmlich gar nicht so schwer um es zu verstehen.

    'And' und 'Or' sind Bitwise (auf Bit-Ebene) Operationen, also mathematische Operationen wie z.B. "-", "+", "*" und "/".

    Hier gibts weiteres zu Lesen.
    tutorialspoint.com/vb.net/vb.net_operators.htm
    docs.microsoft.com/en-us/dotne…nce/operators/or-operator
    docs.microsoft.com/en-us/dotne…ce/operators/and-operator

    AndAlso und OrElse werden vielfach in den Vergleichsoperationen eingesetzt, wie z.B.

    Hier wird zuerst geprüft, ob x gleich ist wie y. Ist das nicht der Fall, wird die Zweite Prüfung gar nicht erst gemacht.

    VB.NET-Quellcode

    1. If x = y AndAlso x mod 2 = 0 Then
    2. EndIf

    Darum kann es ganz gut auch für Objekte eingesetzt werden, wie z.B.

    VB.NET-Quellcode

    1. If mybytearray isnot nothing AndAlso mybytearray.Length > 0 Then
    2. ' Versagt die erste Prüfung, muss die Zweite erst gar nicht gemacht werden.
    3. ' Ansonste würde es nähmlich zu einer Exception führen.
    4. End If


    docs.microsoft.com/en-us/dotne…ce/operators/and-operator

    OrElse funktioniert sehr ähnlich. Kann z.B. eingesetzt werden, um eine Zahl zu
    Prüfen, ob sie in einem bestimmten Bereich ist. Hier zweischen 10 und 100,
    Währe x kleiner als 10, wird die Zweite Prüfung wird die Zweite Prüfung auch noch gemacht.
    Währe x grösser gleich 10 wird die Zweite Prüfung gar nicht gemacht.

    VB.NET-Quellcode

    1. If x >= 10 OrElse x <= 100 Then
    2. End If


    Natürlich kann es auch für Objekte eingesetzt werden. Auch hier wird zuerst geprüft,
    ob 'str' überhaupt instanziert oder Werte besitzt, ist das nicht der Fall wird die
    Zweite Prüfung erst gar nicht gemacht, und die Exception wird gleich aufgerufen.

    VB.NET-Quellcode

    1. If String.IsNullOrEmpty(str) OrElse str.Length > 10000 Then
    2. Throw New ArgumentOutOfRangeException(....)
    3. End If


    docs.microsoft.com/en-us/dotne…operators/orelse-operator

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Module BitwiseOrAnd
    2. Public Sub Main()
    3. TestAndAlso()
    4. TestOrElse()
    5. TestAnd()
    6. TestOr()
    7. End Sub
    8. Private Sub TestAndAlso()
    9. 'Es gilt: Wenn die erste Prüfung (linke Seite) False ist,
    10. 'wird die Zweite nicht gemacht.
    11. Dim firsttime = DateTimeOffset.Now.AddMinutes(-10)
    12. Dim secundtime = DateTimeOffset.Now.AddMinutes(10)
    13. Dim referencetime = DateTimeOffset.Now
    14. 'referencetime >= firsttime ergibt True
    15. 'referencetime <= firsttime ergibt auch ein True
    16. 'Zwei mal ein True ist bei AndAlso True.
    17. If referencetime >= firsttime AndAlso referencetime <= secundtime Then
    18. Console.WriteLine($"If-Case ist True")
    19. Else Console.WriteLine($"If-Case ist False")
    20. End If
    21. 'referencetime >= firsttime ergibt False
    22. 'Die Zweite Prüfung wird gar nicht mehr gemacht, daher False.
    23. referencetime = referencetime.AddDays(-1)
    24. If referencetime >= firsttime AndAlso referencetime <= secundtime Then
    25. Console.WriteLine($"If-Case ist True")
    26. Else Console.WriteLine($"If-Case ist False")
    27. End If
    28. End Sub
    29. Private Sub TestOrElse()
    30. 'Es gilt: Ist die erste Prüfung True, wird die Zweite
    31. 'nicht mehr gemacht.
    32. Dim firsttime = DateTimeOffset.Now.AddMinutes(-10)
    33. Dim secundtime = DateTimeOffset.Now.AddMinutes(10)
    34. Dim referencetime = DateTimeOffset.Now
    35. 'Da referencetime grösser ist als firsttime wird die zweite
    36. 'Prüfung nicht mehr gemacht.Ergebnis ist True.
    37. If referencetime >= firsttime OrElse referencetime <= secundtime Then
    38. Console.WriteLine($"If-Case ist True")
    39. Else Console.WriteLine($"If-Case ist False")
    40. End If
    41. 'Da der erste Teil False ist, wird die Zweite Prüfung auch
    42. 'noch gemacht, und die sagt dann True aus. Daher ist das
    43. 'Ergebnis True.
    44. referencetime = referencetime.AddDays(-1)
    45. If referencetime >= firsttime OrElse referencetime <= secundtime Then
    46. Console.WriteLine($"If-Case ist True")
    47. Else Console.WriteLine($"If-Case ist False")
    48. End If
    49. 'hier mal umgekehrt
    50. '******************
    51. 'Da die erste Prüfung True ist, wird die zweite Prüfung
    52. 'nicht mehr gemacht. Ergebnis ist True.
    53. referencetime = DateTimeOffset.Now
    54. If referencetime <= secundtime OrElse referencetime >= firsttime Then
    55. Console.WriteLine($"If-Case ist True")
    56. Else Console.WriteLine($"If-Case ist False")
    57. End If
    58. 'Das Gleiche genau hier. Der Erste Teil ist True, daher ist
    59. 'das Ergebnis True. Die zweite Prüfung wird nicht gemacht.
    60. referencetime = referencetime.AddDays(-1)
    61. If referencetime <= secundtime OrElse referencetime >= firsttime Then
    62. Console.WriteLine($"If-Case ist True")
    63. Else Console.WriteLine($"If-Case ist False")
    64. End If
    65. End Sub
    66. Private Sub TestAnd()
    67. 'Bei einer AND-Operation müssen beide Seiten True
    68. 'sein, und nur dann ist das Ergebnis True.
    69. 'Oder anders gesagt:
    70. 'Ist eine Seite False, dann ist das Ergebnis immer False.
    71. Dim firsttime = DateTimeOffset.Now.AddMinutes(-10)
    72. Dim secundtime = DateTimeOffset.Now.AddMinutes(10)
    73. Dim referencetime = DateTimeOffset.Now
    74. 'Hier werden beide Seiten geprüft.
    75. Dim interim1 = referencetime >= firsttime And referencetime <= secundtime
    76. Dim interim2a = True And True 'True
    77. 'Wie oben beschrieben:
    78. Dim interim2b = False And False 'False
    79. referencetime = referencetime.AddDays(-1)
    80. 'Auch hier werden beide Seiten geprüft.
    81. Dim interim3 = referencetime >= firsttime And referencetime <= secundtime
    82. Dim interim4a = False And True 'False
    83. 'Nochmals zur Bestätigung. Ergebnis ist False.
    84. Dim interim4b = True And False
    85. End Sub
    86. Private Sub TestOr()
    87. 'Es gilt: Ist eine Seite True, dann ist das Ergebnis immer True
    88. 'Es kann aber auch gesagt werden:
    89. 'Sind beide Seiten False, dann ist das Ergebnis immer False.
    90. Dim firsttime = DateTimeOffset.Now.AddMinutes(-10)
    91. Dim secundtime = DateTimeOffset.Now.AddMinutes(10)
    92. Dim referencetime = DateTimeOffset.Now
    93. 'Hier werden beide Seiten geprüft.
    94. Dim interim1 = referencetime >= firsttime Or referencetime <= secundtime
    95. Dim interim2a = True Or True 'True
    96. 'Wie oben beschrieben
    97. Dim interim2b = True Or False 'True
    98. Dim interim2c = False Or True 'True
    99. referencetime = referencetime.AddDays(-1)
    100. 'Auch hier werden beide Seiten geprüft.
    101. Dim interim3 = referencetime >= firsttime Or referencetime <= secundtime
    102. Dim interim4a = False Or True 'True
    103. 'Kein True ist vorhanden also False
    104. Dim interim4b = False Or False
    105. End Sub
    106. End Module



    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „exc-jdbi“ ()

    ​Größer als was?
    Also das die Zeit größer als die ENDEZEIT sein muss.

    @exc-jdbi
    Danke die Seiten von MS kenne ich, verwirren mich meist mehr als sie mir helfen.

    Also bei AndAlso und OrElse werden immer erst die erste Bedingung geprüft und nur wenn diese True ist wird auch die zweite Bedingung geprüft?
    Und bei And / Or ?
    Wenn ich hungrig bin und Kühlschrank ist leer, dann kaufe ich ein -> IF IAmHungry And FridgeIsEmpty Then IBuyFood.
    Werden beide geprüft und NUR wenn beide True ist das Result auch True?
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Aber wieso denn größer als die Endezeit? Wenn Du festlegst: Return RefTime >= StartTime AndAlso RefTime <= EndTime, dann sagst Du doch: Gib wieder, ob RefTime größergleich StartTime und (AndAlso) kleinergleich EndTime ist. also ob RefTime zwischen StartTime und EndTime liegt. Wenn also RefTime nun hinter EndTime liegt (also später als EndTime ist, also z.B. RefTime = 15:00 und EndTime = 14:55), dann trifft die 2. Bedingung (RefTime <= EndTime) nicht zu und Du erhältst als Ergebnis für die komplette Bedingung ein False, da durch das AndAlso ja der Gesamtausdruck nur dann True ergibt, wenn alle Teilbedingungen True ergeben. Da die 2. Bedingung aber False zurückgibt, bekommst Du für den Gesamtausdruck ein False. Weil Die RefTime eben nicht IsInTime (ist).

    Amelie schrieb:

    Also bei AndAlso und OrElse werden immer erst die erste Bedingung geprüft und nur wenn diese True ist wird auch die zweite Bedingung geprüft?
    Fast. Es wird nur dann die 2. Bedingung geprüft, wenn es noch notwendig ist und noch nicht durch das Ergebnis der 1. Bedingung eh schon feststeht. Bei AndAlso wird nur die 2. Bedingung geprüft, wenn die 1. Bedingung True ergibt. Bei OrElse wird die 2. Bedingung nur geprüft, wenn die 1. Bedingung False ergibt. Nennt sich short circuit. Ergibt eben meist keinen Sinn, die 2. Bedingung zu prüfen, wenn die 1. schon quasi das Ergebnis festlegt. Bei And und Or werden immer beide Bedingungen geprüft.

    Amelie schrieb:

    Wenn ich hungrig bin und Kühlschrank ist leer, dann kaufe ich ein -> IF IAmHungry And FridgeIsEmpty Then IBuyFood.
    Werden beide geprüft und NUR wenn beide True ist das Result auch True?
    Korrekt. Da das Ergebnis aber effektiv schon feststeht, wenn ich NICHT hungrig bin (1. Bedingung = False also ist das Ergebnis automatisch False), ich also nicht einkaufe, weil ich nicht hungrig bin, ist es überflüssig zu prüfen, ob im Kühlschrank was ist. Es beeinflusst meine Entscheidung eh nicht mehr. Daher kann ich mir den Gang zum Kühlschrank auch sparen. Und das mach ich, indem ich AndAlso statt And verwende.
    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.
    OK, ich glaube ich hab das nun verstanden. Hab mir die Seite mal ausgedruckt. ;)
    Mein Prog. läuft zwar nun ( Zeiteingaben mittels Comboboxen geändert ) aber bin noch nicht so ganz zufrieden mit dem gesamten Code.
    Ist noch zu durcheinander mit den ganzen Sub´s usw...

    Geht das hier noch einfacher?

    VB.NET-Quellcode

    1. Private Sub Combosfuellen()
    2. For I = 0 To 23
    3. Dim Zeiten As String
    4. Zeiten = "0" & I & ":00"
    5. If I > 9 Then Zeiten = I & ":00"
    6. CmB_Starttime.Items.Add(Zeiten)
    7. Cmb_Endtime.Items.Add(Zeiten)
    8. Next
    9. End Sub
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Ja, Du kannst schreiben:

    VB.NET-Quellcode

    1. Private Sub Combosfuellen()
    2. For I = 0 To 23
    3. Dim Zeiten = Date.Today.AddHours(I).ToString("HH:mm")
    4. CmB_Starttime.Items.Add(Zeiten)
    5. Cmb_Endtime.Items.Add(Zeiten)
    6. Next
    7. End Sub

    Date.Today ist das heutige Datum mit dem Zeitstempel Mitternacht, also 00:00 Uhr. Zu diesem Datum-Zeit-Paket packst Du I Stunden drauf (.AddHours(I)) und lässt Dir davon die Zeit als String im 24-Format mit Stunden und Minuten geben (.ToString("HH:mm")).

    Seit einiger Zeit hilft Dir Visual Studio auch noch mehr dabei, den Parameter-Teil nach ToString zu füllen, siehe Anhang.
    Bilder
    • HelpDateTime.png

      22,32 kB, 1.642×185, 47 mal angesehen
    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.