Gå til innhold

Knytte en progressbar til en button?


Anbefalte innlegg

Skrevet

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? :)

Videoannonse
Annonse
Skrevet (endret)

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
Skrevet
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...

Skrevet

... dessuten hvis man vil bruke .Value, så er dette hakket enklere:

ProgressBar1.Value +=  1

 

Aadnk har stålkontroll på VB, men jeg visste ikke han hadde begynt med .NET. ;)

Skrevet (endret)

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
Skrevet

Jada, du er fremdeles ekstremt flink i .NET, men Aadnks løsning fungerer den også. ;)

 

Men, som alltid, det er kjekt å vite hvordan noe kan gjøres enklere. :)

Skrevet

Det er det jeg forsøker å få frem også, at det ofte er en forskjell på hva som fungerer og hva som er korrekt ;) Jeg mener bare at man bør bruke rammeverket slik det er laget...

Skrevet

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.

Skrevet (endret)

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
Skrevet

Ah, du må selvsagt sette Maximum til 101. I tillegg må du sette verdien du ønsker å øke progresjonskontrollen i det første paramenteret: ProgressBar1.Increment(1).

Skrevet (endret)

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
Skrevet

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).

Skrevet

Ah oki. Har nå fått det til å fungere, men jeg bruker increment, og den stiller seg ikke tilbake til 0 etter gjennomført operasjon.. Er det noen mulighet for å bare raskt si hvordan så skal jeg takke for meg å gå å kjøpe vb.NET bok :)

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...