ProgressBar

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
Ik heb ruzie met mn progressbar.

Ik heb een integer, van bijvoorbeeld 5.
Vervolgens wil ik dat de progressbar zich binnen 5 seconden helemaal vult, maar wel met steeds 1 stap (één groen blokje).

Als deze integer bijvoorbeeld 20 is, dan moet de progressbar zich binnen 20 seconden helemaal vullen.

Ik krijg dit maar niet goed, hij lijkt zich steeds langzamer of juist sneller te vullen, ondanks de opgegeven integer.

Het is mij ook niet geheel duidelijk wat de maximum waarde voor de progressbar moet zijn en wilke interval ik moet hebben voor mn timer.

Kan iemand mij hiermee helpen?
 
hoi atom ;) ik ben het :p

Code:
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
ProgressBar1.Value = ProgressBar1.Value + 10
End Sub

en dan vul je voor de interval 5000
 
uhm...

timer1 met interval 1000
nummericupdown voor de integer

vullen met timer1.start
legen met progressbar1.value = progressbar1.mininum

Code:
private sub timer1_tick etc
progressbar1.maximum = nudvalue.value
if progressbar1.value < nudvalue.value then progressbar1.value += 1
end sub
 
Ik heb het een soortement van werkende, maar nu heb ik ruzie met mn progressbar om een ander euvel:

Stel je voor:

Een listview, met 2 kolommen. In de eerste kolom komt gewoon tekst (string). In de tweede kolom een getal.

Nu wil ik door deze items loopen. Dat lukt met behulp van deze code:

Code:
For Each lvi As ListViewItem In lvTaken.Items
            MsgBox(lvi.Text & " " & lvi.SubItems(1).Text)
        Next

Als voorbeeld maar ik gebruik van een MsgBox om de tekst onder de eerste kolom en het getal onder de tweede kolom weer te geven.

Dit is verder geen probleem.

Nu heb ik dus die progressbar die zich vult. De tijd hoelang dat moet duren wordt dus bepaalt door het getal onder de tweede kolom. Via een label laat ik de tekst zien die onder de eerste kolom is geplaats.
Wanneer de progressbar vol is, moet tie weer leeggemaakt worden, en moet tie het volgende item in de listview doen. De label krijgt nou de tekst van de tweede item in de listview, en de progressbar moet zich nu opnieuw vullen met het getal onder de tweede kolom, tweede item in de listview.

Hopelijk heb ik het goed uitgelegd. Ik zal morgen een screenshot plaatsen, met wat extra uitleg.
 
Code:
Public Class Form1
Dim timevalue as integer = 0

Backgroundworker1_dowork:
Code:
For Each lvi As ListViewItem In lvTaken.Items
            lblText.Text = lvi.text
            timevalue = cint(lvi.subitems(1).text)
            timer1.start
            system.threading.sleep(timevalue * 1000)
        Next

en de vorige code de nummericupdowns vervangen door timevalue.
misschien zitten er fouten in, want ik doe dit uit mijn hoofd.
 
Ik ga het proberen, bedankt!
Ik laat het weten. :)

Edit: Het werkt nog niet geheel zoals moet, maar het doet het in ieder geval al voor een gedeeldte.

Als ik op de button klik dat het hele zaakje start (de button waaronder:
Code:
CheckForIllegalCrossThreadCalls = False
        BackgroundWorker1.RunWorkerAsync()
staat), loopt tie wel door de teksten, maar de progressbar loopt niet vol, hij blijft leeg.
Ik zie maar niet waarom niet. :(

Hier is mn huidige code:

BackgroundWorker1.DoWork:

Code:
Timer1.Start()

        For Each Taak As ListViewItem In frmInstellingen.lvTaken.Items
            lblStatus.Text = Taak.Text
            timevalue = Taak.SubItems(1).Text
            Threading.Thread.Sleep(timevalue * 10) 'Heb * 10 gegaan, * 1000 duurt veel te lang
        Next

Timer1.Tick:

Code:
pgb1.Maximum = timevalue
        If pgb1.Value < timevalue Then
            pgb1.Value += 1
        End If

Wat denk je dat het zou kunnen zijn?
 
Laatst bewerkt:
Hi ik denk dat het zo dit moet zijn
is het dit
Code:
pgb1.Maximum = timevalue
        If pgb1.Value < timevalue Then
           pgb1.value =  pgb1.Value + 1
        End If
 
Helaas niet. :(

Code:
pgb1.value =  pgb1.Value + 1
en
Code:
pgb1.Value += 1

doen allebei precies hetzelfde: er wordt steeds 1 bij .Value opgeteld, de tweede manier is alleen net wat korter.

Code:
index = index + 1
en
Code:
index += 1

is bijvoorbeeld ook exact hetzelfde.

Heb ik jouw nou iets geleerd? :D
 
Threading.Thread.Sleep(timevalue * 10) 'Heb * 10 gegaan, * 1000 duurt veel te lang
die maal 1000 is zodat het seconden worden, zelfde als bij timer.interval, in milliseconden, misschien zo snel dat je het niet ziet of ik heb wat over het hoofd gezien
 
Laatst bewerkt:
ik doe altijd een msgbox om te kijken of iets werkt, zet een msgbox na de thread.sleep en kijk of die wordt weergeven.
 
Ik probeer het gelijk, niet weggaan. :D

Edit: hier snap ik dus echt geen sikkepit van. Hij looped inderdaad door de items, maar ik zie de progressbar alleen vollopen als ik de msgbox niet wegklik, dus laat staan.

Wut?
 
Laatst bewerkt:
dan ligt het aan de thread.sleep, de code gaat niet door totdat je de msgbox wegklikt
dus je moet een andere manier vinden van stopzetten voor een tijdje, of gewoon de oude timer :p

handig he die msgboxen?
 
Het is een handig manier om uit te vinden of iets getriggered wordt of niet. Tof.

Helaas ben ik nog weinig opgeschoten met dit euvel. Ik ben gisterenavond ook een uur of wat aan het prutsen geweest met timers en backgroundworker, steeds hier en daar code verplaats en aanpassen, maar ik krijg het maar niet goed. Het is die for each loop, die loopt direct door alle items heen in plaats van te wachten tot de progressbar vol is en dan naar de volgende item te gaan.

Ik heb dus echt geen idee hoe ik dat moet aanpakken.
 
Hallo might !!!


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True

End Sub



Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Commando
ProgressBar1.Increment(+1)
If ProgressBar1.Value = 100 Then
Timer1.Enabled = False
Comando

ProgressBar1.Value = 0
End If



Doei! :thumb:
 
Volgens mij heb ik het voor elkaar! :D

Ik test nog even verder, want ik wil zeker weten dat het goed loopt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan