Irritante ProgressBar

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
Argh.

Elke keer als ik een poging doe een progressbar te gebruiken, werkt deze maar half of helemaal niet.

Een voorbeeld: Ik heb een listview met 4 items.
Met een For i As Integer = 0 To ListView1.Items Itereer ik door alle items. De code tussen For en Next voert een actie die verder niet belangrijk is. Als deze code het eerste item heeft behandeld, is het tweede item aan de beurt, en op dat moment moet de progressbar voor 25% gevuld zijn (1 van 4 = 25%). Als het tweede item doorgelopen is, zijn er dus 2 items klaar, en 2 items komen nog aan de beurt. Dat is dus 2 van de 4 klaar, dus 50%.

Ik gebruik BackGroundWorker1.ReportProgress om de huidige progress door te geven aan de ReportPorgress Sub van een BackGroundWorker. In die sub staat weer:

ProgressBar1.Value = e.ReportProgress

Maar het klopt gewoon niet. Hoe bereken ik de juist percentages?
 
hey,

wat vindt je van deze:

Code:
               ProgressBar.Refresh()
                Dim percent As Integer = CInt(((CDbl(ProgressBar.Value) / CDbl(ProgressBar.Maximum)) * 100))
                ProgressBar.CreateGraphics().DrawString(percent.ToString() & "%", New Font("Arial", CSng(8.25), FontStyle.Regular), Brushes.Black, New PointF(ProgressBar.Width / 2 - 10, ProgressBar.Height / 2 - 7))

deze gebruik ik zelf ook met BackgroundWorker

success

Dummy1912
 
Moet ik die code onder Private Sub BackGroundWorker1_ProgressChanged plaatsen?

Wat een ingewikkelde regel is dat zeg. :P
 
hey,

ik heb dat bij mij onder de do_work staan vanaf als hij de progressbar laad.

ProgressBar.PerformStep()
hier onder heb ik het staan.

Sorry voor de code maar denk dat dit het makkelijkste is :)

Dummy1912
 
Laatst bewerkt:
Het werkt niet. :(

Ik zie wel de 0% verschijnen, maar de pgb wordt niet gevuld.

En als ik de regel ProgressBar1.Performstep() boven jouw code zet, vult tie maar tot 2 % (had 2 items in de lijst).

Ik niet begrijp. :(
 
ok

probeer dit eens:
Code:
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

               ProgressBar1.PerformStep()
                ProgressBar1.Maximum = '''hier zal dan eventueel de info van je items moeten komen. 
                ProgressBar1.Refresh()
                Dim percent As Integer = CInt(((CDbl(ProgressBar1.Value) / CDbl(ProgressBar1.Maximum)) * 100))
                ProgressBar1.CreateGraphics().DrawString(percent.ToString() & "%", New Font("Arial", CSng(8.25), FontStyle.Regular), Brushes.Black, New PointF(ProgressBar1.Width / 2 - 10, ProgressBar1.Height / 2 - 7))

                
               ProgressBar1.PerformStep()
                Application.DoEvents()
                Refresh()

end sub

Dummy1912
 
De maximum waarde van de progressbar is 100, de standaard waarde. Moet ik dit veranderen in het aantal items, dus als ik 4 items, dat de maximum dan 4 moet zijn? En moet ik nog * 10 doen ofzo?
 
ja dat kan ik niet zeggen
probeer met de code te spelen tot het werkt

Het zal wel lukken gewoon even uittesten :)
blijven veranderen tot je iets vindt.

Jammer genoeg heb ik nog nooit met die items gewerkt enkel met files :)

Dummy1912
 
Ik heb het bijna goed:

bgwUploadToFTP.ReportProgress(Convert.ToInt32(CurrentIndex * 100 / lvFilesToUpload.Items.Count))
 
hey, das leuk te horen :)

ben blij voor u.
dus heeft men code u toch goed op weg geholpen.

Dummy1912
 
Nee eigenlijk niet, want ik die code die ik gebruik begint met ....ReportProgress(), die is in jouw code niet te vinden. Ik heb op google gezocht op vb .net calculate percentage, en dat heeft me geholpen.

Toch bedankt voor je hulp, dat draw string wat jij gebruikt ziet er wel interesant uit en wordt gebruikt om een percentage weet te geven op de progressbar, maar waarom moeilijk doen als je ook gewoon een label op de pgb kan zetten en de percentage met de label weer te geven?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan