Countdown die niet Live update.

Status
Niet open voor verdere reacties.

sabthal

Gebruiker
Lid geworden
13 sep 2011
Berichten
81
Goedenavond,

Ik zit met een probleemje, ik heb een code voor een Countdown timer gemaakt zie hieronder:
Code:
 Dim Time As Integer

'Knop voor 15 minuten countdown timer.
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Time = 0
        Label1.Text = 9000
        PictureBox2.Width += Time
        Timer1.Enabled = True
    End Sub
    'Timer 15 minuten.
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Time = Time + 1
        PictureBox2.Width = 164 / 900 * Time
        numberToRound = Label1.Text / 600
        truncatedResult = (Fix(numberToRound))
        Label2.Text = truncatedResult
        numberToRound = Label1.Text / 10
        truncatedResult3 = (Fix(numberToRound))
        Label3.Text = truncatedResult3 - (truncatedResult * 60)
        If Time = 900 Then
            Timer1.Enabled = False
            MsgBox("Test!", 4096 + 48, "Test")
        End If
    End Sub

Het enige wat niet goed gaat is dat de tijd bij het aftellen bij 48 seconden blijft hangen voor 2 seconden.
Ik zie dan 2 seconden lang 14: 48 en daarna springt hij wel naar 14:47, hetzelfde met 14:35 en verder naar beneden. Dit is erg vreemd, weet iemand waar dat door komt?

De Timer.Interval staat op 100

Als er meer info nodig is wil ik dat graag geven, tevens is het idee nog om miliseconden toe te voegen zoals dit: 14:59:99. Misschien is er wel een veeeeel makkelijkere code om af te tellen van 15 minuten naar 0 in het formaat 00:00:00 (MM:SS:SS) :d

Om het beter te begrijpen heb ik een zip bestand met de exe erin toegevoegd (de Break knop gebruik ik om te testen)

Alvast hartelijk dank voor de gedane moeite!:thumb:

*Let op: de progressbar heb ik zelf gemaakt en het is een plaatje wat van een width van 0 naar 164 gaat*
 

Bijlagen

Hoi,

Persoonlijk zou ik nooit afgaan op de interval van de timer... Ik zou eerder gebruik maken van het "now"-statement. Een klein voorbeeldje (wat eigenlijk niet zo handig is):
Code:
    Private eind As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim uur As Integer = Now.Hour
        Dim minuut As Integer = Now.Minute
        Dim seconde As Integer = Now.Second
        Dim miliseconde As Integer = Now.Millisecond

        If seconde + 5 > 60 Then
            seconde -= 60
            minuut += 1
        End If
        eind = uur & ":" & minuut & ":" & seconde + 5

        Timer1.Interval = 1
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Label1.Text = Now.Hour & ":" & Now.Minute & ":" & Now.Second
        If eind = Label1.Text Then
            Timer1.Stop()
            MsgBox("Eind!")
        End If
    End Sub

Hierin zie je dat ik gebruik maak van het "now"-statement, wat veel preciezer is dan de interval van een timer. Probeer maar eens met een stopwatch. Dit voorbeeld is eigenlijk niet handig omdat ik erin gebruik maak van strings, en niet van integers, wat makkelijker zou zijn als je er meer mee moet rekenen of het preciezer wil maken met miliseconden. Maar dat kan je dan dus zelf doen ;)

Succes!:thumb:

MartinJM

[edit]
Ook als je de label juist wilt laten aftellen zijn integers een stuk makkelijker, met dit stukje code laat de label alleen de huidige tijd zien.
[/edit]
 
Laatst bewerkt:
Bedankt voor je reactie MartinJM!
Ik weet in ieder geval in welke richting ik het moet zoeken ;)
Alhoewel ik niet heel erg veel van integers weet.. maar dat vind ik wel op google :)
Ik laat het vanavond wel weten.
 
Een integer is simpel gezegd gewoon een geheel getal. Er zit een maximum aan, maar dat is heel groot, dus daar zou je geen last van moeten hebben.
Als je bijvoorbeeld aan het rekenen bent met gehele getallen, dan zijn alle getallen integers. Snap je?

Anders typ ik het straks even op mijn computer uit...
MartinJM
 
Ik kan vanavond als ik thuis ben wel weer prutsen hoor :)
Maar een klein simpel voorbeeldje is natuurlijk altijd meer dan welkom.

Edit: Bedoel je dat Now.Hour dan bijvoorbeeld 1 uur is?
 
Laatst bewerkt:
Now.Hour geeft het huidige uur weer. Dus als het bijvoorbeeld 8 uur 15 is, dan geeft Now.Hour "8".

Dan een voorbeeldje met integers. Het zal nog niet helemaal zijn wat jij wil, maar anders schrijf ik jouw code, wat ook niet de bedoeling is (helaas wel eens gebeurd):
[CPP] Private Eind_Uur As Integer
Private Eind_Minuut As Integer
Private Eind_Seconde As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Eind_Uur = Now.Hour
Eind_Minuut = Now.Minute
Eind_Seconde = Now.Second + 15

terug:

If Eind_Uur > 24 Then
Eind_Uur -= 24
GoTo terug
ElseIf Eind_Minuut > 60 Then
Eind_Uur += 1
Eind_Minuut -= 60
GoTo terug
ElseIf Eind_Seconde > 60 Then
Eind_Minuut += 1
Eind_Seconde -= 60
GoTo terug
End If

Timer1.Interval = 10
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
LblHuidigeTijd.Text = Format(Now.Hour, "00") & ":" & Format(Now.Minute, "00") & ":" & Format(Now.Second, "00")
LblAftellen.Text = Format(Eind_Uur - Now.Hour, "00") & ":" & Format(Eind_Minuut - Now.Minute, "00") & ":" & Format(Eind_Seconde - Now.Second, "00")

If Eind_Uur = Now.Hour And Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
Timer1.Stop()
MsgBox("Eind!")
End If
End Sub[/CPP]

Hiermee zou je al een heel eind moeten komen...

Het is ook mogelijk om de verschillende integers in een array te zetten, maar dit is waarschijnlijk iets makkelijker...

Succes!:thumb:

MartinJM
 
Ik krijg negatieve getallen bij het aftellen :P
Maar ik weet nu in ieder geval hoe ik het moet doen, ga nu eerst 3 websites maken :)
 
Wat is je input?
Als je 5 minuten wilt aftellen, dan moet je minuten +5 doen.

Waarvoor ga je 3 websites maken?

MartinJM
 
Ik heb dit gedaan:

Code:
Eind_Uur = Now.Hour + 2
Eind_Minuut = Now.Minute + 40
Eind_Seconde = Now.Second + 45

Maar dan zie ik dus als resultaat dat hij erg raar aftelt :

02:-19:-20
02:-19:-21
02:-19:-22

Erg vreemd.

De 3 websites staan los van dit hehe :)
 
Laatst bewerkt:
Oeps, sorry, het aftellen ging niet zo makkelijk...:o

[CPP] Private Eind_Uur As Integer
Private Eind_Minuut As Integer
Private Eind_Seconde As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Eind_Uur = Now.Hour + 2
Eind_Minuut = Now.Minute + 40
Eind_Seconde = Now.Second + 45

Terug:

If Eind_Uur > 24 Then
Eind_Uur -= 24
GoTo Terug
ElseIf Eind_Minuut > 60 Then
Eind_Uur += 1
Eind_Minuut -= 60
GoTo Terug
ElseIf Eind_Seconde > 60 Then
Eind_Minuut += 1
Eind_Seconde -= 60
GoTo Terug
End If

Timer1.Interval = 10
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
LblHuidigeTijd.Text = Format(Now.Hour, "00") & ":" & Format(Now.Minute, "00") & ":" & Format(Now.Second, "00")

Dim AftellenUur As Integer = Eind_Uur - Now.Hour
Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

If AftellenUur < 0 Then
AftellenUur += 24
GoTo AftellenTerug
ElseIf AftellenMinuut < 0 Then
AftellenUur -= 1
AftellenMinuut += 60
GoTo AftellenTerug
ElseIf AftellenSeconde < 0 Then
AftellenMinuut -= 1
AftellenSeconde += 60
GoTo AftellenTerug
End If

LblAftellen.Text = Format(AftellenUur, "00") & ":" & Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00")

If Eind_Uur = Now.Hour And Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
Timer1.Stop()
MsgBox("Eind!")
End If
End Sub[/CPP]

Omdat je niet -20 minuten kan hebben, moet er dan 1 uur vanaf worden getrokken, en 60 minuten er weer bij.... Dat was ik even vergeten.....


En ik was alleen benieuwd waarvoor je websites maakt :)

MartinJM
 
Oh, die websites zijn voor mijn familie.. niet heel bijzonder.

De timer heb ik nu werkend dankzij jouw :)
Nu probeer ik de blauwe progressie balk die d.m.v. een plaatje van 0 width naar 164 width gaat te fixen, maar ik heb geen idee wat de kortste en beste formule ervoor is.

Tevens ben ik erachter gekomen dat de functie:
Code:
Me.Text = ("TEST") & Label2.Text
Niet werkt? Dat is dus in het form als text : Test 02:40:45

Heel erg bedankt voor de integer tip!:thumb:
 
Laatst bewerkt:
Wat je zou kunnen doen voor de progressbar, is het totale aantal seconden berekenen en dan apart berekenen hoeveel seconden er nog afgeteld moeten worden. Deel die door elkaar en vermenigvuldig die met de totale width(164) en je hebt de width die de progressbar moet hebben (of vergis ik me nu??).

Ik begrijp dat je de text van de form wilt mee laten tellen? Zorg er dan voor dat die code ook in de timer staat. Ergens onder de code die de label vult.


Ik denk dat je dit zelf wel kan, maar als het niet lukt, wil(len) ik(/wij) je altijd helpen!:)

Succes!:thumb:

MartinJM


[edit]
Volgens mij maakt het niet echt uit wat de beste en kortste code is, als de code maar werkt! :p
[/edit]
 
Laatst bewerkt:
Je hebt gelijk, ik heb de hele code al klaar, alleen hoe hij optelt moet ik nog.
Dit is trouwens de totale code die ik heb:

Code:
Option Explicit On
Public Class Form1
    Private Eind_Minuut As Integer
    Private Eind_Seconde As Integer
    Private Eind_Milliseconde As Integer

    Dim Time As Integer

    'Altijd bovenop en naam applicatie + tijd in formnaam.
    Public Sub MakeOnTop()
        Me.TopMost = True
        Me.Text = ("TEST" & Label2.Text)
    End Sub

    'Knop voor Break.
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Eind_Minuut = Now.Minute + 15
        Eind_Seconde = Now.Second
        Eind_Milliseconde = Now.Millisecond
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        ElseIf Eind_Milliseconde > 1000 Then
            Eind_Seconde += 1
            Eind_Milliseconde -= 1000
            GoTo terug
        End If

        Timer1.Interval = 10
        Timer1.Enabled = True
    End Sub
    'Knop voor Lunch.
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Eind_Minuut = Now.Minute + 30
        Eind_Seconde = Now.Second
        Eind_Milliseconde = Now.Millisecond
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        ElseIf Eind_Milliseconde > 1000 Then
            Eind_Seconde += 1
            Eind_Milliseconde -= 1000
            GoTo terug
        End If

        Timer2.Interval = 10
        Timer2.Enabled = True
    End Sub
    'Knop voor 10 Minuten Personal Time.
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Eind_Minuut = Now.Minute + 10
        Eind_Seconde = Now.Second
        Eind_Milliseconde = Now.Millisecond
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        ElseIf Eind_Milliseconde > 1000 Then
            Eind_Seconde += 1
            Eind_Milliseconde -= 1000
            GoTo terug
        End If

        Timer3.Interval = 10
        Timer3.Enabled = True
    End Sub
    'Knop voor Aangepaste Minuten.
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Eind_Minuut = Now.Minute + TextBox1.Text
        Eind_Seconde = Now.Second
        Eind_Milliseconde = Now.Millisecond
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        ElseIf Eind_Milliseconde > 1000 Then
            Eind_Seconde += 1
            Eind_Milliseconde -= 1000
            GoTo terug
        End If

        Timer4.Interval = 10
        Timer4.Enabled = True
    End Sub
    'Stopknop.
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim Response As Integer

        ' Displays a message box with the yes and no options.
        Response = MsgBox(Prompt:="Timer stoppen?", Buttons:=vbYesNo)

        ' If statement to check if the yes button was selected.
        If Response = vbYes Then
            Time = 0
            Eind_Minuut = Now.Minute
            Eind_Seconde = Now.Second
            Eind_Milliseconde = Now.Millisecond
            Timer1.Enabled = False
            Timer2.Enabled = False
            Timer3.Enabled = False
            Timer4.Enabled = False
            PictureBox2.Width = 0
            PictureBox3.Width = 0
            PictureBox4.Width = 0
            PictureBox5.Width = 0
            Label2.Text = ("00:00:00")
        Else
            ' The no button was selected.

        End If
       
    End Sub

    'Timer voor de Break.
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        
        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second
        Dim AftellenMilliseconde As Integer = Eind_Milliseconde - Now.Millisecond

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        ElseIf AftellenMilliseconde < 0 Then
            AftellenSeconde -= 1
            AftellenMilliseconde += 1000
            GoTo AftellenTerug
        End If

        'aftellen van seconden
        Label2.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00") & ":" & Format(AftellenMilliseconde, "00")

        'Progressbar:
        PictureBox2.Width = 190 / 900

        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second And Eind_Milliseconde = Now.Millisecond Then
            Timer1.Enabled = False
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 190
            PictureBox3.Width = 0
            PictureBox4.Width = 0
            PictureBox5.Width = 0
        End If
    End Sub
    'Timer voor de Lunch.
    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second
        Dim AftellenMilliseconde As Integer = Eind_Milliseconde - Now.Millisecond

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        ElseIf AftellenMilliseconde < 0 Then
            AftellenSeconde -= 1
            AftellenMilliseconde += 1000
            GoTo AftellenTerug
        End If

        'aftellen van seconden
        Label2.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00") & ":" & Format(AftellenMilliseconde, "00")

        'Progressbar:
        PictureBox2.Width = 190 / 1800

        'Wat te doen bij einde timer
        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second And Eind_Milliseconde = Now.Millisecond Then
            Timer1.Enabled = False
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 0
            PictureBox3.Width = 190
            PictureBox4.Width = 0
            PictureBox5.Width = 0
        End If
    End Sub
    'Timer voor de 10 Minuten Personal Time.
    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        'Huidige tijd
        Label1.Text = Format(Now.Hour, "00") & ":" & Format(Now.Minute, "00") & ":" & Format(Now.Second, "00")

        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second
        Dim AftellenMilliseconde As Integer = Eind_Milliseconde - Now.Millisecond

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        ElseIf AftellenMilliseconde < 0 Then
            AftellenSeconde -= 1
            AftellenMilliseconde += 1000
            GoTo AftellenTerug
        End If

        'aftellen van seconden
        Label2.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00") & ":" & Format(AftellenMilliseconde, "00")

        'Progressbar:
        PictureBox4.Width = 190 / 600

        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer3.Enabled = False
            Label2.Text = ("00:00:00")
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 0
            PictureBox3.Width = 0
            PictureBox4.Width = 190
            PictureBox5.Width = 0
        End If
    End Sub
    Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second
        Dim AftellenMilliseconde As Integer = Eind_Milliseconde - Now.Millisecond

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        ElseIf AftellenMilliseconde < 0 Then
            AftellenSeconde -= 1
            AftellenMilliseconde += 1000
            GoTo AftellenTerug
        End If

        'aftellen van seconden
        Label2.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00") & ":" & Format(AftellenMilliseconde, "00")

        'Progressbar:
        PictureBox5.Width = 190 / TextBox1.Text

        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer4.Enabled = False
            Label2.Text = ("00:00:00")
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 0
            PictureBox3.Width = 0
            PictureBox4.Width = 0
            PictureBox5.Width = 190
        End If
    End Sub
End Class

Oke, dat van die tijd in de formtitel is gelukt, top zeg! hij update alleen niet :P
 
Laatst bewerkt:
Ik heb twee vragen:
Waarom gebruik je 3 verschillende timers die hetzelfde doen? Als het maar een beetje verschilt, dan kan je dat ook met bijvoorbeeld nog een variable regelen...
Ik zie dat er een bepaald stukje code vaak voorkomt. Waarom zet je dat niet in een sub met verschillende (optionele) byval's?

Deze 2 punten zouden de code een heel stuk korter en leesbaarder maken...

MartinJM

[edit]
Wat bedoel je met "Hij update alleen niet"?
 
Dat komt omdat ik een beginner ben in programmeren, het kan altijd beter dan wat ik maak, hehe :)

Hij update de tijd niet in de formulierbalk.
 
Iedereen is begonnen, en bij velen is het (hopelijk) verbeterd!:D

Maar ik zal je een voorbeeld geven:

Als je een bepaald stukje code hebt wat je vaker in een programma gebruikt, dan is het handig om dat in een sub/function te zetten. Je kan een sub meerdere waarden meegeven, ook optionele waarden:
[CPP] Private Sub TestSub1(ByVal Waarde As String, ByVal Waarde2 As Integer)
'//code'
End Sub

Private Sub Testsub2(Optional ByVal Waarde As String = "Standaard", Optional ByVal Waarde2 As Integer = 0)
'//code'
End Sub[/CPP]

Die waarden kan je dan weer verder gebruiken in die sub:
[CPP] Private Eind_Uur As Integer
Private Eind_Minuut As Integer
Private Eind_Seconde As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Testsub2(, 5, 45)
End Sub

Private Sub Testsub2(Optional ByVal Extra_Uur As Integer = 0, Optional ByVal Extra_Minuten As Integer = 0, Optional ByVal Extra_Seconden As Integer = 0)
Eind_Uur = Now.Hour + Extra_Uur
Eind_Minuut = Now.Minute + Extra_Minuten
Eind_Seconde = Now.Second + Extra_Seconden

Terug:

If Eind_Uur > 24 Then
Eind_Uur -= 24
GoTo Terug
ElseIf Eind_Minuut > 60 Then
Eind_Uur += 1
Eind_Minuut -= 60
GoTo Terug
ElseIf Eind_Seconde > 60 Then
Eind_Minuut += 1
Eind_Seconde -= 60
GoTo Terug
End If

Timer1.Interval = 10
Timer1.Start()
End Sub[/CPP]

Hiermee verander je dus hoeveel er bij de uren/minuten/seconden opgeteld wordt.


Als je bijvoorbeeld meerdere verschillende messages wil weergeven op basis van op welke knop er is gedrukt, dan kan je nog een nieuwe variable aanmaken die je vult als er op een knop wordt gedrukt. Die lees je dan uit na het aflopen van de timer.


Dan zou je uiteindelijk zoiets krijgen:
[CPP]
Private Eind_Uur As Integer
Private Eind_Minuut As Integer
Private Eind_Seconde As Integer
Private Message As String = Nothing

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Message = "Pauze voorbij"
Testsub2(, 5, )
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Message = "Rookpauze voorbij"
Testsub2(, 2, )
End Sub

Private Sub Testsub2(Optional ByVal Extra_Uur As Integer = 0, Optional ByVal Extra_Minuten As Integer = 0, Optional ByVal Extra_Seconden As Integer = 0)
Eind_Uur = Now.Hour + Extra_Uur
Eind_Minuut = Now.Minute + Extra_Minuten
Eind_Seconde = Now.Second + Extra_Seconden

Terug:

If Eind_Uur > 24 Then
Eind_Uur -= 24
GoTo Terug
ElseIf Eind_Minuut > 60 Then
Eind_Uur += 1
Eind_Minuut -= 60
GoTo Terug
ElseIf Eind_Seconde > 60 Then
Eind_Minuut += 1
Eind_Seconde -= 60
GoTo Terug
End If

Timer1.Interval = 10
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
LblHuidigeTijd.Text = Format(Now.Hour, "00") & ":" & Format(Now.Minute, "00") & ":" & Format(Now.Second, "00")

Dim AftellenUur As Integer = Eind_Uur - Now.Hour
Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

If AftellenUur < 0 Then
AftellenUur += 24
GoTo AftellenTerug
ElseIf AftellenMinuut < 0 Then
AftellenUur -= 1
AftellenMinuut += 60
GoTo AftellenTerug
ElseIf AftellenSeconde < 0 Then
AftellenMinuut -= 1
AftellenSeconde += 60
GoTo AftellenTerug
End If

LblAftellen.Text = Format(AftellenUur, "00") & ":" & Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00")
Me.Text = "TEST " & LblAftellen.Text

If Eind_Uur = Now.Hour And Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
Timer1.Stop()
MsgBox(Message)
End If
End Sub[/CPP]

Let wel op dat je alles begrijpt voordat je het gaat gebruiken. Ook wil ik je erop wijzen dat er een aantal namen weer verwisseld zijn. Hierin zit ook al het updaten van de text van de window.


Succes!:thumb:

MartinJM
 
Volgens mij maakt het niet echt uit wat de beste en kortste code is, als de code maar werkt! :p
Als hobbyist inderdaad. Toch ben ik blij dat de TS zelf nauwkeurig wil zijn door Option Explicit aan te zetten :)

Ik heb trouwens dezelfde vraag als Martin: Wat bedoel je met "Hij update alleen niet"?
 
Laatst bewerkt:
Hij update de tijd in de formbar niet, nu wel omdat hij nu in de timer code zit verwerkt.

Ik zit nog even te leren hoe dat werkt met die kortere code, dat is namelijk wel interessant.

Heb hem op dit moment zo gemaakt:

Code:
Option Explicit On
Public Class Form1
    Private Eind_Minuut As Integer
    Private Eind_Seconde As Integer

    Dim Time As Integer

    'Altijd bovenop en naam applicatie + tijd in formnaam.
    Public Sub MakeOnTop()
        Me.TopMost = True
    End Sub

    'Knop voor Break.
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Text = ("TEST ") & Label1.Text
        Eind_Minuut = Now.Minute + 15
        Eind_Seconde = Now.Second
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        End If

        Timer1.Interval = 10
        Timer1.Enabled = True
    End Sub
    'Knop voor Lunch.
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.Text = ("TEST ") & Label1.Text
        Eind_Minuut = Now.Minute + 30
        Eind_Seconde = Now.Second
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        End If

        Timer2.Interval = 10
        Timer2.Enabled = True
    End Sub
    'Knop voor 10 Minuten Personal Time.
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Me.Text = ("TEST ") & Label1.Text
        Eind_Minuut = Now.Minute + 10
        Eind_Seconde = Now.Second
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        End If

        Timer3.Interval = 10
        Timer3.Enabled = True
    End Sub
    'Knop voor Aangepaste Minuten.
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Eind_Minuut = Now.Minute + TextBox1.Text
        Eind_Seconde = Now.Second
        PictureBox2.Width = 0
        PictureBox3.Width = 0
        PictureBox4.Width = 0
        PictureBox5.Width = 0
Terug:

        If Eind_Minuut > 60 Then
            Eind_Minuut -= 60
            GoTo terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo terug
        End If

        Timer4.Interval = 10
        Timer4.Enabled = True
    End Sub
    'Stopknop.
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim Response As Integer

        ' Displays a message box with the yes and no options.
        Response = MsgBox(Prompt:="Timer stoppen?", Buttons:=vbYesNo)

        ' If statement to check if the yes button was selected.
        If Response = vbYes Then
            Time = 0
            Eind_Minuut = Now.Minute
            Eind_Seconde = Now.Second
            Timer1.Enabled = False
            Timer2.Enabled = False
            Timer3.Enabled = False
            Timer4.Enabled = False
            PictureBox2.Width = 0
            PictureBox3.Width = 0
            PictureBox4.Width = 0
            PictureBox5.Width = 0
            Label1.Text = ("00:00:00")
        Else
            ' The no button was selected.

        End If

    End Sub

    'Timer voor de Break.
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        End If

        'aftellen van minuten en seconden
        Label1.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00")
        'progress van aftellen in de formlabel
        Me.Text = ("TEST ") & Label1.Text
        'Progressbar:
        PictureBox2.Width = 190 / 900

        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer1.Enabled = False
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 190
            PictureBox3.Width = 0
            PictureBox4.Width = 0
            PictureBox5.Width = 0
        End If
    End Sub
    'Timer voor de Lunch.
    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        End If

        'aftellen van minuten en seconden
        Label1.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00")
        'progress van aftellen in de formlabel
        Me.Text = ("TEST ") & Label1.Text
        'Progressbar:
        PictureBox2.Width = 190 / 1800

        'Wat te doen bij einde timer
        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer1.Enabled = False
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 0
            PictureBox3.Width = 190
            PictureBox4.Width = 0
            PictureBox5.Width = 0
        End If
    End Sub
    'Timer voor de 10 Minuten Personal Time.
    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick

        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        End If

        'aftellen van minuten en seconden
        Label1.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00")
        'progress van aftellen in de formlabel
        Me.Text = ("TEST ") & Label1.Text
        'Progressbar:
        PictureBox4.Width = 190 / 600

        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer3.Enabled = False
            Label1.Text = ("00:00:00")
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 0
            PictureBox3.Width = 0
            PictureBox4.Width = 190
            PictureBox5.Width = 0
        End If
    End Sub
    Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

        If AftellenMinuut < 0 Then
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        End If

        'aftellen van minuten en seconden
        Label1.Text = Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00")
        'progress van aftellen in de formlabel
        Me.Text = ("TEST ") & Label1.Text
        'Progressbar:
        PictureBox5.Width = 190 / TextBox1.Text

        If Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer4.Enabled = False
            Label1.Text = ("00:00:00")
            MsgBox("Test", 4096 + 48, "Test")
            PictureBox2.Width = 0
            PictureBox3.Width = 0
            PictureBox4.Width = 0
            PictureBox5.Width = 190
        End If
    End Sub
    Private Overloads Sub URLTextBox_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

        If e.KeyCode = Keys.Return Then
            Me.Text = ("TEST ") & Label1.Text
            Eind_Minuut = Now.Minute + TextBox1.Text
            Eind_Seconde = Now.Second
            PictureBox2.Width = 0
            PictureBox3.Width = 0
            PictureBox4.Width = 0
            PictureBox5.Width = 0
Terug:

            If Eind_Minuut > 60 Then
                Eind_Minuut -= 60
                GoTo terug
            ElseIf Eind_Seconde > 60 Then
                Eind_Minuut += 1
                Eind_Seconde -= 60
                GoTo terug
            End If

            Timer4.Interval = 10
            Timer4.Enabled = True
        End If
    End Sub
End Class

Mijn progressbar gaat nog niet automatisch van width 0 naar 190. dit komt waarschijnlijk door een fout die ik niet zie.
 
Op dit moment gebruik je verkeerde codes voor het berekenen van de breedte:
Jij doet bijvoorbeeld de breedte van de picturebox / textbox1.text in timer 4. In andere timers doe je iets anders....

Maar de formule zou (volgens mij) moeten zijn:
Breedte = (Seconden die nog moeten / Totaal seconden) * De breedte op 100%

Dit soort dingen zijn ook makkelijker te veranderen/ te ontdekken als je de code in subs zou doen :p Dat is eigenlijk het grootste voordeel van je code opsplitsen in subs...


Wat snap je nog niet van die kortere code? Dan kan ik (/kunnen wij) het je misschien beter uitleggen...


MartinJM

[edit]
Aangezien de default van Option Explicit "On" is, gebruik ik het ook altijd... :p
[/edit]
 
Laatst bewerkt:
Eigenlijk niet veel, kan zijn omdat het laat is :P kijk er morgen nog een keer na :)

De code die ik nu heb voor de progressbar is: PictureBox2.Width = Label1.Text / 900 * 194

Maar omdat Label1.Text omgezet word naar: Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00") pakt hij de totale seconden niet :(


Edit: Ik snap de subs geloof ik :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan