Minuten und Sekunden Anzeigen in Label

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von HellsJack.

    Minuten und Sekunden Anzeigen in Label

    Hallo an alle bin neu hier und habe auch gleich ein Problem, wobei es ja keine Probleme gibt sondern nur Hindernisse.

    Und zwar bin ich dabei mit VB 2010 Express für die Schule ein Quiz zu Programmieren.

    Form1 ist die Form mit dem Startbutton ab dem auch die Zeit gezählt werden soll in Minuten : Sekunden.

    die Formen 2 - 11 enthalten die 10 Fragen.

    Auf der Form12 sind einige labels die Text enthalten wobei Label5 nun die Zeit enthalten soll in Minuten : Sekunden seit dem man auf Form1 auf start geklickt hat bis jetzt wo die Form12 geladen wurde.

    Eigentlich hört es sich total einfach an und das ist es sicherlich auch, nur habe ich schon Google durchforstet mit einem Timer Experimentiert, mit Datetime.now experimentiert wobei mein problem immer war das ich das nicht in String konvertieren konnte.

    Bitte helft mir und zeigt mir einen einfachen Weg wie die verstrichene Zeit im Label5 der Form12 angezeigt werden kann.

    Vielen Dank schonmal im Vorraus.

    Grüße Freddy

    Zählt weiter

    Jo vielen dank Schonmal,

    das hat aber mein Hindernis nicht beseitigt.

    1. Die zeit im Label5 zählt immer weiter aber sie soll beim laden von Form12 stehen bleiben

    2. wird die zeit nur in Sekunden angezeigt ich will aber das sie in Minuten : Sekunden angezeigt wird ( 00:50) bei 50 sekunden

    3. kann ich von form12 nicht auf die Variable in meinem fall Zeit die sich in Form1 befindet da hier auch der startbutton und der Timer ist zugreifen, oder ich weiß nicht wie (auch nicht wie man eine Variable für alle formen macht -.-)

    und beim Timer-Tick event habe ich einfach:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Zeit += 1
    3. Form12.Label5.Text = Zeit
    4. End Sub


    gemacht. Das event ist in Form1

    Edit: zu 1.

    ich mache einfach

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Zeit += 1
    3. If Form12.Visible = True Then
    4. Timer1.Enabled = False
    5. End If
    6. Form12.Label5.Text = Zeit
    7. End Sub


    Vielen Dank für weitere Vorschläge
    zu 3. du kannst einfach auf die Variable zugreifen, indem du sie nicht Dim Zeit As Integer sondern Public Zeit As Integer deklarierst, dann kannst du von Form12 mit Form1.Zeit darauf zugreifen.

    zu 2. des geht´sicher besser, aber ich würds so machen:

    erst ne neue Variable Minuten
    statt

    VB.NET-Quellcode

    1. Form12.Label5.Text = Zeit
    :

    VB.NET-Quellcode

    1. If Zeit >= 60 Then
    2. Zeit-60
    3. Minuten+=1
    4. EndIf
    5. If Minuten < 10 Then
    6. If Zeit < 10 Then
    7. Form12.Label5.Text = "0" & Minuten& ":" & "0" & Zeit
    8. Else
    9. Form12.Label5.Text = "0" & Minuten& ":" & Zeit
    10. EndIf
    11. Else
    12. If Zeit < 10 Then
    13. Form12.Label5.Text = Minuten& ":" & "0" & Zeit
    14. Else
    15. Form12.Label5.Text = Minuten& ":" & Zeit
    16. EndIf
    17. EndIf


    Gruß Einsteiger
    Ich danke dir vielmals.

    ich werde es später gleich ausprobieren.

    das Kaufmännische & dient wohl als trennzeichen das wusste ich noch nicht und danke für den tipp mit der Deklaration.

    wie ich es mit schon dachte ist es alles sehr leicht^^ aber von allein bin ich nicht darauf gekommen habe vor paar tagen erst vb installiert^^

    naja ich gebe noch bescheid wie es klappt villeicht hilft es anderen auch die angefangen haben wie ich.

    ich habe dann auch noch ein "Hindernis" mit einer progressbar muss ich da nen neuen thread aufmachen oder hier weiterschreiben?

    gruß Freddy
    In VB6 würde ich es bis 59 Minuten so machen:

    VB.NET-Quellcode

    1. Option Explicit
    2. Private Laufzeit As Date
    3. Private Sub cmdReset_Click()
    4. Laufzeit = CDate("00:00:00")
    5. End Sub
    6. Private Sub Timer1_Timer()'Interval auf 1000
    7. Laufzeit = Laufzeit + CDate("00:00:01")
    8. lblTimer.Caption = Format(Minute(Laufzeit), "00") & ":" & Format(Second(Laufzeit), "00") & " Minuten"
    9. End Sub


    Darüber so:

    VB.NET-Quellcode

    1. Option Explicit
    2. Private Laufzeit As Date
    3. Private Sub cmdReset_Click()
    4. Laufzeit = CDate("00:00:00")
    5. End Sub
    6. Private Sub Timer1_Timer()
    7. Dim Minuten As Long
    8. Laufzeit = Laufzeit + CDate("00:00:01")
    9. Minuten = Hour(Laufzeit) * 60 + Minute(Laufzeit)
    10. lblTimer.Caption = Format(Minuten, "00") & ":" & Format(Second(Laufzeit), "00") & " Minuten"
    11. End Sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    So das mit dem Format für MM : SS habe ich gut hinbekommen nach einigem tüfteln mit der Variante von Einsteiger.

    Doch nun Teile ich den reinen Sekundenwert der in der Variable AHT gespeichert wird mit der Anzahl richtig beantworteter Fragen.
    Durch Zufall war die Zeit 01:11 und das wurde geteilt durch (sry weiß ich nicht mehr) und ergab einen ellen langen Nachkommawert.

    Wie kann ich das auf eine Reine zahl bekommen, also ohne Nachkommastellen.


    Zum Thema Progressbar:
    Ich habe auf den Formen 2-12 Jeweils eine eigene Progressbar eingefügt weil ich nicht weiß wie ich eine auf alle benötigten Formen bekommen kann.

    Anhand dieser Progressbar möchte ich Lediglich anzeigen wie weit meine Mitschüler noch vom Ende des Programmes entfernt sind. Nun habe ich also immer den Value wert auf jeder Form für jede PBar eingestellt, das doofe daran jedes mal wenn die Nächste Form kommt wird sie neu von 0 zum Aktuellen Value wert animiert.

    Ich möchte also das die irgendwie verknüpft sind oder Ich nur eine verwenden brauche oder das beim laden der nächsten Form die Pbar schon auf dem Aktuellen stand ist ohne von 0 zu animieren.

    Außerdem möchte ich eine Word Datei (Urkunde) anhängen die man dann mit einem Button Drucken, (mit Druckerauswahl) ausdrucken kann.
    1. Kann man so ne Datei mit ins Programm einfügen oder muss die Extern anhand des Namens bereitstehen um für den Druck ausgewählt zu werden?
    2. Ich will das Anhand einer TextBox derjenige seinen Namen eingeben kann und dieser dann zusammen mit der Gesamtzeit und der AHT zeit (also Sekunden durch anzahl Richtig beantworteter Fragen) an schon Zuvor festgelegte Stellen (evtl anhand der Zeilennummer und zentriert) in das Dokument eingepflegt werden sodas es dann Aktualisiert gedruckt wird.

    So das wären auch meine letzten wünsche. Ich will keinen Code Vorgelegt bekommen, wenn überhaupt bitte beispiele (Danke an Einsteiger und die anderen) um es auch gleich zu lernen.

    @ Antihacker: Einen button dafür will ich nicht da die zeit schon drin stehen soll um weiterverwendet zu werden. Ich hab es auch so schon hinbekommen aber trotzdem danke.

    Vielen Dank im vorraus

    gruß Freddy

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

    1.

    Runden kannst du mit Math.Round(zurundenderWert, anzahlderstellen)

    2.Damit die Progressbar immer weiter geht, würde ich auch wieder eine PublicVariable deklarieren, und jeweils im FormLoadEvent, der Formen, die Progressbar auf den Wert dieser Variablen setzen, die natürlich immer erhöht wird.
    Nachteil:die Form, in der die Variable angegeben ist muss immer geöffnet sein, was man aber mit Hide statt Close machen könnte

    3.
    Drucken kann man mit PrintDialog, PrintPreview... und zwar kann man alles mögliche drucken, TextBoxen,Labels...

    Gruß
    Hey,

    nur als Anmerkung: das Zeit-Ausrechnen und Anzeigen lässt sich auch in drei Codezeilen erledigen - Modulo-Rechnung und ToString() heißen die Stichwörter:

    VB.NET-Quellcode

    1. Dim sec As Integer = Zeit Mod 60
    2. Dim min As Integer = (Zeit - sec) / 60
    3. Label1.Text = min.ToString("00") & ":" & sec.ToString("00")


    Wobei ich damit natürlich nicht sagen will, dass Einsteigers Code falsch wäre - ich hab ihn mir zwar nicht ganz angeschaut, aber wenn er funktioniert, wirds ja passen ;).
    Aber so ist es halt kürzer und ich bevorzuge kurzen Code ;)

    MfG
    Turtle10

    Form Schließen

    Also das mit Form.close habe ich schon versucht aber da wird immer das Ganze Programm geschlossten statt nur z.B. Form3 (form3.close)
    so habe ich es einfach so gemacht das ich im Form.load event von z.B. form4 das geschrieben habe:

    form3.visible = false

    Brauche ich immer dann trotzdem für jede neue Form eine Eigene Progressbar oder kann ich die von form2 übertragen auf die anderen formen?

    3. hat nicht meine frage beantwortet ob ich ein Worddokument ins programm einbinden kann (wünschenswert) oder eines extern brauche oder auch eine Exel Datei.

    @ Turtle10: Vielen dank für den Tipp. In diesem Programm werde ich ihn nicht versuchen da es schon so funktioniert wie ich es wollte. und Kürzeren Code... wer findet den nicht besser? dient auch der Übersichtlichkeit, Lesbarkeit und dem Stil^^ Vielen Dank trotzdem

    Vielen Dank

    Gruß Freddy
    @ Turtle
    du hast recht so ist es besser

    nein, du kannst nicht einfach die Progressbar übertragen du kannst nur den Wert übertragen:
    Progressbar1.Value = Form1.Progressbar1.Value

    und statt Visible = False nehm lieber Form2.Hide()

    was meinst du genau mit "Worddokument einbinden"?
    den Text eines Worddocuments einzulesen oder ähnliches, oder was?

    Gruß Einsteiger

    Form Schließen

    ich meine Theoretisch glaube ich man könnte in einem Ordner ein Worddokument speichern und mit dem programm darauf zugreifen?

    Ich möchte das das Worddokument in meinem Programm drinnen ist und ich es mit diesem verwenden kann. Dieses WordDokument soll schon eine Formatierung und Text enthalten und hier soll nur an der Entsprechenden Stelle die Zeit eingetragen werden und der name Den man im Programm das ich mache also das Quiz eintragen kann in ne Textbox

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

    ich weiß nicht wie man die ganze Formatierung miteinbeziehen kann, aber wenn das worddocument immer gleich bleibt, dann mach es doch einfach nicht als Worddocument, sondern als eigene Form, die als Hintergrund einen Scrennshot von deinem Wordocument hat und wo an den richtigen Stellen TextBoxen sind

    dann kannst du alles drucken
    Wenn ich dir einen Tipp geben darf:
    Mach nicht alles in einzelne Formen, sondern auf einzelne Panel-Bereich einer einzigen Form.
    Stt eine andre Form zu öffnen machst du das alte Panelunsichtbar unddas neue Sichtbar, also z.B.:

    VB.NET-Quellcode

    1. panel_frage1.Visible = false 'Vorherige Frage ausblenden
    2. panel_frage2.Visible = true 'UNd gleich die ächste hinterher ;)

    Die Progrssbar platzierst du ausserhalb der Panels und erhöhst sie bei jedem Panelwechsel, also:

    VB.NET-Quellcode

    1. Progressbar1.Value = Progressbar1.Value + 12 'Oder plus was auch immer


    Mfg, jmb.96 :)
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."
    Cool ich habe noch garnicht gewusst das es eine möglich keit gibt das ganze schauspiel auf einer form zu machen wobei ich auch schon an sowas gedacht habe

    Danke für den Tipp.

    und jmb.96 ich höre noch richtige Musik^^