Gå til innhold

Knytte en progressbar til en button?


Anbefalte innlegg

Vel, jeg holder på med et lite program her, og siden jeg er helt nybegynner på VB.NET støter jeg på små problemer\utfordringer hele tiden. FOr eksempel har jeg lagt inn en progressbar, men har ikke peiling på hvordan jeg får denne til å fungere? Jeg har en knapp som når trykkes utfører et arbeid, og jeg vil gjerne indikere dette ved hjelp av progressbaren, men jeg vet ikke hvordan jeg skal "integrere" den i arbeidet.

 

Noen som kan hjelpe? :)

Lenke til kommentar
Videoannonse
Annonse

Det er i hovedsak kun èn ting som er nødvendig - å finne ut hva en bør telle progresjonen i operasjonen ufra. Eksempelvis kan du anvende antall slettede filer dersom programmet sletter en viss mengde filer. Når dette nummeret er kalkulert, setter du simpelthen ProgressBar1.Maximum til denne verdien. Deretter er det rett og slett å øke Value-egenskapen med 1 for, i dette eksempelet, sletter.

 

Det kan nok òg være en fordel å kalle Application.DoEvents() ofte (f.eks. hver gang du oppdaterer progresjonskontrollen) dersom operasjoen er nokså tidkrevende og du ikke ønsker at hovedformen skal være utilgjengelig under prosessen.

 

Jeg har vedlagt en liten eksempelkode:

    Dim Tell As Int32

 

    ' Antall operasjoner: 100 + 1 = 101

    ProgressBar1.Maximum = 101

 

    ' Utfør en operasjon 101 ganger

    For Tell = 0 To 100

 

        ' Øk den nåværende progresjonen

        ProgressBar1.Increment(1)

 

        ' La andre meldinger til applikasjonen eksekveres

        Application.DoEvents()

 

        ' Vent 100 millisekunder (simlulerer en operasjon, så som å slette en fil)

        System.Threading.Thread.Sleep(100)

 

    Next

 

Før øvrig ... hvorfor ikke ta en titt i en programmeringsbok for .NET? Det er nok mye raskere og bedre enn å legge ut en alskens tråder her på forumet.

Endret av aadnk
Lenke til kommentar
Det er i hovedsak kun èn ting som er nødvendig - å finne ut hva en bør telle progresjonen i operasjonen ufra. Eksempelvis kan du anvende antall slettede filer dersom programmet sletter en viss mengde filer. Når dette nummeret er kalkulert, setter du simpelthen ProgressBar1.Maximum til denne verdien. Deretter er det rett og slett å øke Value-egenskapen med 1 for, i dette eksempelet, sletter.

 

Det kan nok òg være en fordel å kalle Application.DoEvents() ofte (f.eks. hver gang du oppdaterer progresjonskontrollen) dersom operasjoen er nokså tidkrevende og du ikke ønsker at hovedformen skal være utilgjengelig under prosessen.

 

Jeg har vedlagt en liten eksempelkode:

    Dim Tell As Int32

 

    ' Antall operasjoner: 100 + 1 = 101

    ProgressBar1.Maximum = 100

 

    ' Utfør en operasjon 101 ganger

    For Tell = 0 To 100

 

        ' Vis hvilken nåværende progresjon vi har

        ProgressBar1.Value = ProgressBar1.Value + 1

 

        ' La andre meldinger til applikasjonen eksekveres

        Application.DoEvents()

 

        ' Vent 100 millisekunder (simlulerer en operasjon, så som å slette en fil)

        System.Threading.Thread.Sleep(100)

 

    Next

 

Før øvrig ... hvorfor ikke ta en titt i en programmeringsbok for .NET? Det er nok mye raskere og bedre enn å legge ut en alskens tråder her på forumet.

6112234[/snapback]

Ikke for å pirke, men det er vel strengt tatt finere programmeringsmessig å bruke increment()-metoden til prograssBar i stedet for å sette Value hele tiden...

Lenke til kommentar

Jeg mener fortsatt at increment() er finere. Det er en grunn til at funksjonene er der. Bruk .net slik det er ment at man skal...

 

(Selv om han har stålkontroll på VB trenger han ikke ha stålkontroll på .net-rammeverket. Jeg har jobbet med dette i flere år)

Endret av Manfred
Lenke til kommentar

Japp, det er for så vidt nokså nylig at jeg startet med .NET-rammeverket. Jeg har såklart forsøkt å sette meg inn i relevant litteratur knyttet til emnet - den innførte operatøren += er ikke ukjent for meg - men jeg burde nok studert de ulike prosedyrene i denne kontrollen mer inngående;Increment() gikk meg beklageligvis hus forbi. Jeg skal få oppdatert kodeeksempelet.

Lenke til kommentar

Takk for masse hjelp.. Prøvde først med den opprinnelige koden med Value, og det fungerte fint untatt:

 

An unhandled exception of type 'System.ArgumentException' occurred in system.windows.forms.dll

 

Additional information: '101' is not a valid value for 'value'. 'value' should be between 'minimum' and 'maximum'.

 

 

 

 

Sikkert enkel måte å fikse dette på?

Endret av Earth657
Lenke til kommentar

ah ok.. fikk det til å funke sånn halveis nå med increment. Eneste problemet er at den ikke tilbakestiller seg etter at operasjonen er fullført... den står på max og hvis jeg prøver å gjennta operasjonen (trykke på knappen en gang til) skjer ingenting.. :)

 

EDIT: i tillegg beveger ikke progress-baren seg i takt med operasjonen.. det å fullføre kommandoene tar bare 2-3 sekunder, mens progressbaren kjører jevnt i ca 10sekunder..

Endret av Earth657
Lenke til kommentar

Vel, da må du tilbakestille posisjonen ved å sette Value-egenskapen til 0.

 

Nei, du skal ikke lime inn koden direkte. Poenget er at du må selv finne ut hvor stor Max-verdien skal være. Dette kan du blant annet beregne ved å telle antall filer du skal gjøre en operasjon med. Sleep-prosedyren kan du godt fjerne i din kode - det var kun for å illustrere progresjonen (ellers ville progresjonsbaren blitt full med en gang etter eksekvering).

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...