Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Legg til en timer på formen. Sett den til å telle ned en eller annen verdi, sett intervall til 1000 (1000 ms = 1 s)

 

En ting alle burde tenke på når en lager GUI programmer:

GUI-kontroller er ikke et egnet sted å lagre informasjon for behandling i. GUI brukes for som et grensesnitt for brukeren. Det er derfor sjeldent noen god idé å for eksempel bruke en label som en teller

 

Label1.Text -= 1

Denne koden vil kræsje dersom Label1.Text ikke inneholder et tall

 

counter -= 1
Label1.Text = CStr(counter)

Denne koden har ingen muligheter for å feile, siden counter alltid vil inneholde et tall (dersom den er deklarert som et integer) Koden er også raskere, siden det ikke foregår noen implisitt konvertering fra tekst til tall slik som i foregående funksjon.

 

Tenk på GUI som et abstraksjonslag mellom programkoden og brukeren, ikke som en del av programmet.

Lenke til kommentar

Takk for svar! :)

 

I og med at jeg er ganske ny innen programmering så forstod jeg ikke helt. Jeg skal altså ha en timer som teller ned (vises i en Label) fra 30 eller 60 sec.

 

Private Sub Timer1_Tick
Label1.Text -= 1
End Sub

 

Dette funket ikke :p I labelen står tallet 60 fra før.

Lenke til kommentar

Nå sa jeg også at du ikke skulle skrive det ^^

 

Public Class MainForm
Private Counter As Integer
Private Const CountStart As Integer = 5
Public Sub New()
	' This call is required by the Windows Form Designer.
	InitializeComponent()
	' Initialiser telleren
	Counter = CountStart
	CountLabel.Text = CStr(Counter)
End Sub

Private Sub CountTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CountTimer.Tick
	If (Counter > 0) Then
		Counter -= 1
		CountLabel.Text = CStr(Counter)
	End If
	' Telleren er nådd null, vis dette ved å farge teksten rød.
	If Counter = 0 Then
		CountLabel.ForeColor = Color.Red
		StartButton.PerformClick()
	End If
End Sub

Private Sub StartButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartButton.Click
	' Start/stopp telleren
	CountTimer.Enabled = Not CountTimer.Enabled
	StartButton.Text = IIf(CountTimer.Enabled, "Stop", "Start")
End Sub

Private Sub ResetButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ResetButton.Click
	' Reset telleren
	Counter = CountStart
	CountLabel.ForeColor = SystemColors.ControlText
	CountLabel.Text = CStr(Counter)
End Sub
End Class

Lenke til kommentar

Takker igjen for svar, men får det fortsatt ikke til... :( Er CountTimer det samme som Timer bare at du har skiftet navn på den? Og StartButton er en vanlig Button? Skal ha en knapp som kun starter og ikke stopper ;) det skal den gjøre automatisk når timeren har nådd 0.

 

Mvh

Halvard :)

 

Glem det! Hadde bare satt Timer Interval til 10000 istedenfor 1000... :p

Men må fortsatt ha StartButton til å kun starte timeren!

Endret av bellduck
Lenke til kommentar

Ja det er sant :) Men når telleren er nådd null har jeg gjort sånn at det kommer opp en MsgBox, men siden den fortsetter å "telle" til null hele tiden så kommer det en ny hvert sekund. Hvordan får jeg den til å bare komme en gang?

 

If Counter = 0 Then
		Label1.ForeColor = Color.Red
		MsgBox("textextextextextext")
	End If

 

I tilleg kommer det +1 på en teller hver gang en knapp trykkes. Jeg ønsker at tallet som står i den telleren når Counter er nådd null også skal stå i MsgBoxen som popper opp. Hvordan gjør jeg dette? :)

 

Mvh

Halvard

Lenke til kommentar

For å stoppe telleren, skriver du bare CounterTimer.Stop()

For å legge sammen to tekst strenger bruker du & operatøren

MsgBox("txtxtxtxtxt" & CStr(CounterUp))

For eksempel.

 

Bruk & for å legge sammen tekst stringer. Vær svært obs over datatypene du bruker, og konverter for å gjøre meningen entydig. Dette kan spare deg for latterlig mye arbeid senere.

Lenke til kommentar
Ok nå klarte jeg det! :)

 

Men så var det det med å få StartButton til kun å starte og ikke stoppe timeren. :p

 

Takker og bukker for kjempegod hjelp et stykke videre inn i VB verden! :)

 

Mvh

Halvard

 

CountTimer.Start() = Starter

CountTimer.Stop() = Stopper.

 

Du kan jo ha begge i en knapp om du vil ha en start\pause knapp på samme knapp (dårlig orklart)

 

Feks:

 

If CountTimer.Enabled = True then

CountTimer.Stop()

else

CountTimer.Start()

End If

 

Edit: GeirGrusom sniken var før meg.

Endret av Merkoen
Lenke til kommentar
Du vet jeg ikke gjør noe annet enn å snike rundt her ^^

 

Hehehe!:) Kjempeflott! Funker supert nå ;) Dere vet ikke tilfeldigvis hvordan man lager en High-score-greie? Altså f.eks en Label som viser høyeste oppnådde score ;)

 

Mvh

Halvard

 

Edit: Noen skriveleif...

Endret av bellduck
Lenke til kommentar
Jepp er som fyren over sier.

 

Den ligger der du har lagra prosjektet: > WindowsApplication1\bin\Debug

 

Kan jeg spørre hvilket type 'spill' du lager?

Det med highscore burde ikke være så vrient..Men litt info om spillet ditt kunne vært kjekkt :)

Ok glem det med highscore :) Laget et lite spill der man kan teste hvor mange tastetrykk man klarer på musa på 30 sec. :p Egentlig mest for å finne ut hvordan man bruker en timer ;) Har også laget 3 på rad og Stein, saks, papir :) Man må jo begynne i en ende...

 

Den .exe fila jeg fant under Debug fungerte på pcen jeg sitter med nå (som jeg programmerte den på), men på en av de andre maskinene mine kom det opp en melding om at programmet måtte lukkes. Hva kommer det av?

Endret av bellduck
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...