hoe, delay?

Status
Niet open voor verdere reacties.

jaccovh

Gebruiker
Lid geworden
13 feb 2012
Berichten
213
zoals de titel al zegt, hoe doe ik een delay in vb 2010 express?
ik heb een programma met 1 knop en 1 label, ik wil dat de text van de label elke 1 seconde veranderd naar wat ik wil. hoe kan ik dat doen?

button = button1
label = label1
voor het geval het in de code moet.

ik waardeer een snelle maar goede reactie. eventueel de code ervoor, dat zou fijn zijn.
alvasgt bedankt
 
Maak eerst een array waar je alle tekst in zet (in het voorbeeld 0 t/m 6):

[CPP]Dim strArray(0 to 6) As String[/CPP]

vul deze vervolgens op de volgende manier:(let op! kan ook met een loop eventueel)
[CPP] strArray(0) = "item 0"
strArray(1) = "item 1"
strArray(2) = "item 2"
strArray(3) = "item 3"
strArray(4) = "item 4"
strArray(5) = "item 5"
strArray(6) = "item 6"[/CPP]

Maak vervolgens een variabele die bijhoud welk item in de array geselecteerd moet worden:

[CPP]Dim arraycount as integer = 0[/CPP]

Voeg een timer toe en zet die als volgt:
timerk.png


dubbelklik op de timer en zet in de code:

[CPP] Label1.Text = strArray(arraycount).ToString()
If Not arraycount = 6 Then
arraycount = arraycount + 1
Else
arraycount = 0
End If
[/CPP]

dubbelklik vervolgens op de button en zet daar de volgende code in:
[CPP]timer2.start[/CPP]

Zodra er op de button wordt geklikt zal de timer starten (timer.start) en elke 1000 miliseconde de text van de label veranderen naar het volgende item in de array.

Project files: http://www.mediafire.com/?f21cy0c6uoqcuwu
 
Even tussendoor:

Een array kun je ook zo declareren:
[CPP]Dim str As String() = {"a","b","c","d"}[/CPP]

:cool:
 
Even nog op de opmerking van joz71:

De manier van joz is uiteraard ook handig, alleen moet je in jouw geval (omdat je zinnen hebt) de code opbreken met _

dat doe je als volgt:

[CPP] Dim str As String() = {"a", _
"b", _
"c", _
"d"}[/CPP]

oftewel:

[CPP]Code SPATIE_SPATIE Code[/CPP]

Dan kan je makkelijker zinnen toevoegen, anders worden je statements zo lang :)

Overigens kan je de lengte van een array ook vinden door er de methode .length(), dat zou in mijn voorbeeld beter werken.

De volgende code:
[CPP]Label1.Text = strArray(arraycount).ToString()
If Not arraycount = 6 Then
arraycount = arraycount + 1
Else
arraycount = 0
End If[/CPP]

vervang je dan door:

[CPP]Label1.Text = strArray(arraycount).ToString()
If Not arraycount = strArray.length Then
arraycount = arraycount + 1
Else
arraycount = 0
End If[/CPP]

Als je dan de grootte van je array aanpast dan hoeft dat maar op 2 plekken I.P.V drie.


Let op dat je wel de gehele array moet vullen, anders krijg je een nulpointerexception. (of controlleer of een item niet null is)
 
Even nog op de opmerking van mastermindzh:

Als je gebruik maakt van VS10 of later, kan je ook zonder het underscore teken verder gaan op een nieuwe regel:

Code:
Dim str As String() = {"a",
                              "b",
                              "c",
                              "d"}
 
Even nog op het bericht van mastermindzh,

Dit kan echter ook wat eleganter. Wanneer je een woord uit de array van Strings haalt, hoef je daar vervolgens geen ToString meer op aan te roepen, je hebt al een String.
Ook moet de waarde arraycounter steeds handmatig aangepast worden aan de lengte van de array strArray, wat natuurlijk niet zo handig is. In plaats daarvan zou je de lengte van strArray moeten opvragen, zo houd je de hele boel een beetje dynamisch.

Mijn variant erop:

Plaats een timer op je form, noem deze timUpdateLabel, dubbelklik er vervolgens op en plaats de volgende code in de nieuw aangemaakte event handler:
[cpp]If (Teller = Woorden.Length) Then Teller = 0 ''// Controleer of hij al bij het laatste woord in de array is geweest, zo ja reset de teller dan naar nul.
NaamVanJeLabel.Text = Woorden(Teller) ''// Haal een woord uit de woorden array en prop deze in het label.
Teller += 1 ''// Hoog de teller met één op zodat hij niet steeds hetzelfde woord zal laten zien[/cpp]
In de properties window van de timer stel je de property Interval in op 1000 (= milliseconde, dus 1 seconde)

Buiten de event handler van de timer zet je de volgende code:
[cpp]Private Woorden As String() = {"ABC", "Hallo", "Test", "Dit is een bericht", "123"} ''// Hier staan alle woorden in die je wilt laten zien in het label.
Private Teller As Integer = 0 ''// De teller die bijhoudt welk woord er in het label moet staan.[/cpp]

Vervolgens dubbelklik je op de button en plaats je er de volgende code in:
[cpp]timUpdateLabel.Start() ''// Start de timer welke elke seconde de text van het label gaat veranderen[/cpp]

Uiteindelijk kom je dan op zoiets uit:
[cpp] Private Woorden As String() = {"ABC", "Hallo", "Test", "Dit is een bericht", "123"}
Private Teller As Integer = 0

Private Sub timUpdateLabel_Tick(sender As System.Object, e As System.EventArgs) Handles timUpdateLabel.Tick
If (Teller = Woorden.Length) Then Teller = 0
NaamVanJeLabel.Text = Woorden(Teller)
Teller += 1
End Sub

Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click
timUpdateLabel.Start()
End Sub[/cpp]

P.S. ''// staat er om de VB comments als C++ comments weer te geven
 
In post 4 maak ik hem dynamisch :)
Dat van die strings, daar heb je 100% gelijk in haha, waarom ik het deed? idk :D aanwensel denk ik!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan