Rofls parkhauprogramm = war "Label in HH:mm:ss"

  • VB.NET

Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von Rofl.

    Rofls parkhauprogramm = war "Label in HH:mm:ss"

    Guten Tag,

    ich bin gerade dabei für die Hochschule ein Programm zu schreiben. Mein erster kontakt mit VB08 war vor ca 3 Monaten. Bisher hat Google mir sehr gut geholfen aber leider komm eich jetzt nicht mehr vorran.

    Das Programm soll ein Automatisches Parkhaus simulieren. Das Einparken funktioniert so weit. Und sobald eine Box belegt wird wird eine variable mit der Dateandtime.timer beschrieben.

    Und nun kommen meine 2 probleme. 1. : wenn ich dann die Zeit anzeigen will wie lange die Box belegt wird. Wird diese nur un Secunden angezeigt, ich würde aber gerne die Zeit in HH-MM-SS anzeigen lassen. leider funktioniert nix, das hier ist der letze Stand.

    VB.NET-Quellcode

    1. If VAR_box_A1 = "1" Then
    2. LB_A1_Parkdauer.Text = Format(Now, "HH:mm:ss")
    3. LB_A1_Parkdauer.Text = DateAndTime.Timer - VAR_Stopuhr_A1
    4. ElseIf LB_A1_Parkdauer.Text = "00:00:00" Then
    5. End If


    2. Wie kann ich diese Zeit dann die ganze Zeit weiteraufen lassen?

    gruß Rolf

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

    Zu Problem 1:
    Ich verstehe den Code nicht ganz. Wäre vielleicht hilfreich, wenn du erläutern könntest, was die einzelnen Variablen bedeuten und welche Werte ihnen zugewiesen werden. Ansonsten sehe ich, dass du den Text des einen Labels 2x zuweist:

    VB.NET-Quellcode

    1. LB_A1_Parkdauer.Text = Format(Now, "HH:mm:ss")
    2. LB_A1_Parkdauer.Text = DateAndTime.Timer - VAR_Stopuhr_A1

    Welchen Zweck hat das? Der erste Wert wird ja einfach überschrieben.

    Zu Problem 2:
    Das geht mit einem Timer. Stell ihn am besten auf Interval 1000 (1 Sekunde)

    Kouki schrieb:

    Das geht mit einem Timer. Stell ihn am besten auf Interval 1000 (1 Sekunde)

    mach 250 draus sonst kann es sein, dass die anzeige etwas "hackt" (hatte ich bei einem Programm selbst mal das Problem)

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hi,

    zu 1.: VAR_Box_A1 ist eine Bariable die ich als Byte deklariert habe, dort steht nur eine 1 für belegt oder 0 für Frei drin.
    VAR_Stopuhr_A1 ist eine Variable die ich als String deklariert habe. Dort wird die Aktuelle zeit reingeschrieben sobald die Box belegt wird.

    Gedacht ist es so das ständig(siehe 2.) das Label welches die bisherige Parkdauer anzeigt berechnet wird. Das mache ich dadurch das ich die aktuelle zeit nehme und die Einparkzeit abziehe. Dieses Funktioniert auch, aber ich bekomme das Ergebnis in sec mit einer menge Kommastellen. Benötigen tue ich es aber in HH:MM:SS. Zur zeit Rufe ich diese funktion mit einem Button auf. Das wird geändert sobald ich Punkt 2 gelöst habe.

    zu 2.: Wenn ich diesen timer dann in einer Schleife setzte, würde es dann nicht ewig laufen und alles andere blockieren? oder muss er an eine Bestimmte stelle damit er im hintergrund läuft? Kann ich auch eine Zeitschleife dafür nehmen? Die habe ich schon programmiert da ich die Ständig brauche und einfach aufzurufen ist.
    1. Nimm bei dem zweiten lieber DateTime als String und beim 1. einen Boolean. Dann kannst du bei jedem Tick des Timers die Anzahl der Sekunden, die zwischen Einparkzeit und aktueller Zeit liegen, erhalten. Dazu ziehst du von der aktuellen Zeit die Einparkzeit ab, wodurch du einen TimeSpan erhältst.

    2. Schleife? Einfach den Timer aktivieren und den Code in das Tick-Event einfügen. openbook.galileocomputing.de/e…asic_kap_02_003.htm#t2t33
    Boolean ist ein Wahrheitswert und kann entweder "True" ( = Wahr) oder "False" ( = "Falsch") sein.

    VB.NET-Quellcode

    1. Dim IchBinKouki As Boolean = True
    2. Dim IchBinDu = False

    Und DateTime ist einfach eine Variable, die ein Datum mit Uhrzeit enthält.

    VB.NET-Quellcode

    1. Dim Gerade As DateTime = DateTime.Now
    2. Dim Gestern As DateTime = DateTime.Today.AddDays(-1)

    Ein TimeSpan ist die Zeit, die zwischen zwei DateTimes liegt.

    VB.NET-Quellcode

    1. Dim GesternBisJetzt As TimeSpan = Gerade.Subtract(Gestern)
    HI

    mit dem Boolean ist mir denke ich klar. Statt meiner Variable "1" ist dann dort True und statt der "0" ein false. Hat das einen bestimmten vorteil? Das werde ich wohl einbauen sobald ich das andere Problem gelöst habe

    mit dem Time Span habe ich auch teoretisch kappiert, aber ich bekomme es nicht hin das der TimeSpan im lable angezeigt wird.

    VB.NET-Quellcode

    1. Dim VAR_Aktuellezeit As DateTime
    2. If VAR_box_A1 = "1" Then
    3. VAR_Aktuellezeit = DateTime.Now
    4. Dim VAR_A1_Timespan As TimeSpan = VAR_Aktuellezeit.Subtract(VAR_Stopuhr_A1)
    5. LB_A1_Parkdauer.Text = VAR_A1_Timespan
    6. ElseIf LB_A1_Parkdauer.Text = "00:00:00" Then
    7. End If

    So würde es ich machen:

    VB.NET-Quellcode

    1. Public oBSb As Date
    2. ....
    3. sub Timer1...
    4. Label1.Text -= Format(New TimeSpan(Now.Ticks - oBSb.Ticks).Hours, "00:") & _
    5. Format(New TimeSpan(Now.Ticks - oBSb.Ticks).Minutes, "00:") & _
    6. Format(New TimeSpan(Now.Ticks - oBSb.Ticks).Seconds, "00")
    7. end sub
    Schau dir mal die TimeSpan-Structur an. Die gibt dei gwünschtes Format aus, und erspart dir die Rechnerei mit Tcks und Co. Mit .Add und .Substract kannst du die Prkzeit berechnen. Da dein Rechner sicherlich auch die Uhrzeit ausgeben wird :D , ist ein Timer überflüssig. Hier ist die Rechnerei mit DateTime beschrieben. Mit .Now erhält du die aktuelle Zeit.
    Fiel Fergnügen
    Vatter

    Edit: Für die 25 anzeigen oder mehr rate ic dir zu einer Klasse "Parklücke" mit den Propertys ParkenStart, ParkenEnde, belegt/frei, Nummer etc und einer List(of Parklücke) So ne List ist dynamisch erweiterbar....
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    @Vatter: Eine Structure würde auch schon reichen, denke ich.

    VB.NET-Quellcode

    1. Public Structure Parklücke
    2. Private _Name As String
    3. Public Property Name() As String 'Der Name der Parklücke
    4. Get
    5. Return _Name
    6. End Get
    7. Set(ByVal value As String)
    8. _Name = value 'Hier lässt sich der String noch verändern, z.B. bestimmte Zeichen rausfiltern.
    9. End Set
    10. End Property
    11. Private _Belegt As Boolean
    12. Public Property Belegt() As Boolean 'Ist die Parklücke belegt?
    13. Get
    14. Return _Belegt
    15. End Get
    16. Set(ByVal value As Boolean)
    17. If value And Not _Belegt Then 'Wenn die Parklücke besetzt wird und vorher nicht besetzt war, ...
    18. _ParkenStart = DateTime.Now '... erhält der Parkzeitpunkt den Wert der jetzigen Zeit
    19. End If
    20. _Belegt = value
    21. End Set
    22. End Property
    23. Private _ParkenStart As DateTime
    24. Public ReadOnly Property ParkenStart() As DateTime 'Seit wann ist die Lücke besetzt? Dieser Wert kann nur gelesen und nicht beschrieben werden.
    25. Get
    26. Return IIf(_Belegt, _ParkenStart, Nothing) 'Wenn die Lücke besetzt ist, wird _ParkStart zurückgegeben, ansonsten Nichts (Nothing).
    27. End Get
    28. End Property
    29. Public ReadOnly Property Parkdauer() As TimeSpan 'Wie lange ist die Lücke schon besetzt? Dieser Wert kann nur gelesen und nicht beschrieben werden.
    30. Get
    31. Return IIf(_Belegt, DateTime.Now.Subtract(_ParkenStart), Nothing) 'Wenn die Lücke besetzt ist, wird die Parkdauer zurückgegeben, ansonsten Nichts (Nothing).
    32. End Get
    33. End Property
    34. End Structure


    Dann einfach eine List(Of Parklücke), 25 Parklücken addieren und es hat sich. Die Parkdauer und der Zeitpunkt des Einparkens werden automatisch gesetzt und sind leicht abrufbar. Ich hoffe, ich habe den Code ausreichend kommentiert.
    Hi,

    ich bewunder euch für euer Wissen, aber bisher sind meine VB08 fähigkeiten sehr zurückgeblieben. Hier mal mein Bisheriges Programm, damit ihr mal sehr wie mein Stand ist und um auch das Problem evtl besser zu erkennen. Ich habe mir gerade mal die TimeSpan sachen angeschaut, habe aber nix gefunden was mein problem löst.

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

    Jeder hier hat einmal klein Angefangen. Aber viele, die jetzt nicht mehr im Forum aktiv sind, haben nur wenig bis garkeine Eigeninitiative gezeigt. Du bemühst dich im Gegensatz zu diesen Leuten sehr, dass du es irgendwie hinbekommst, und hast dir auch schon ein kleines Grundlagenwissen angeeignet ohne einmal nach fertigem Quellcode zu fragen, höchstens mal Beispiele, was ja vollkommen in Ordnung ist. Die Bewunderung steht also eher dir zu ^^

    Okay. Hast du schon ein wenig Wissen über Klassen, Strukturen etc.?