webForumDet fria alternativet

Stoppa loop

7 svar · 300 visningar · startad av Viking

VikingMedlem sedan maj 20003 652 inlägg
#1
Public blnLoop As Boolean

Private Sub Form_Load()

    blnLoop = True

    Do While blnLoop = True
        
        Time.Caption = Now
        DoEvents
    
    Loop
End Sub

Private Sub Command1_Click()

    blnLoop = False
End Sub

Försöker få en klocka som uppdaterar sig konstant, men när jag testkör denna kod så kommer inte något fönster upp. Om jag däremot tar bort DoEvents så hänger skiten sig, och detta är typ det första jag gjort i VB (enbart för att jag vill förbereda mig lite inför Programmering A, inte för att jag konverterat eller så :p), så jag har ingen aning om vad som kan vara fel :)

BeatboxMedlem sedan okt. 20013 217 inlägg
#2

Som jag ser det så lämnar du aldrig Form_Load(). Form_Load() brukar normalt användas till att initiera data innan applikationen kör igång. Man ska dock aldrig bli hängande i denna sub.

Du kanske kan lösa det mha att lägga ut en Timer som sköter uppdateringen av Time.Caption ? Det räcker ju med att uppdatera 1 ggr/s eftersom "Now" inte har någon högra upplösning.

Command1_Click() skulle då bara starta eller stoppa Timern.

GeinMedlem sedan sep. 20005 700 inlägg
#3

Håller med föregående talare. En timer passar mycket bättre. Din label skulle troligtvis mest blinka o ha sej, eftersom programmet nu vill skriva till labeln väldigt många ggr per sekund.

VikingMedlem sedan maj 20003 652 inlägg
#4

Ok. Tyvärr så har jag ungefär noll kunskap om VB, och jag har inte lyckats hitta någon bra manual (har sökt på MS-sida, men har inte hittat något riktigt bra liknanade PHP.nets manual), så jag skulle uppskatta lite mer förklaring :)

GeinMedlem sedan sep. 20005 700 inlägg
#5

dra in en Timer till formen, svår att missa, ikonen är ett tidtagarur.
markera det, tryck ctrl+p så att du kommer till dess egenskaper. Sätt ett lämpligt intervall, typ 1000 om den ska räkna varje sekund.
Så dubbelklickar du på timern och skriver in

Time.Caption = Now

Och i knappen skriver du

timer1.enabled = false

mer tydlig än så går väl inte ;)

VikingMedlem sedan maj 20003 652 inlägg
#6

Hehe, tackar :D

ChristerGbgMedlem sedan sep. 20023 inlägg
#7

Du placerar en label (Namn:Label1)
och en timer (Namn:Timer1) på Formen..
I Properties "skriver" du:

Timer1.enabled=True
Timer1.Interval=950

' Detta skriver du i koden

Private Sub Timer1_Timer()
Label1.Caption = Time
End Sub

:stud

Nexus86Medlem sedan okt. 20023 030 inlägg
#8

om du fortfarande känner för att använda en loop kan du lägga till raden

Me.Show

överst i Form_Load().

128 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)