none
ProgressBar programmieren RRS feed

  • Frage

  • Hallo,


    ich möchte gerne, dass eine ProgressBar1 den Ladevorgang einer Datei anzeigt.
    Die Datei die geladen werden soll, wir mit einem OpenFileDialog1 ausgewählt.


    MFG Stephan R.
    Donnerstag, 19. Februar 2009 17:36

Antworten

  • Meines erachtens musst du die Dateiliste zuerst in einem Array Speichern, da du sonst keine einfache Möglichkeit hast nachzuschauen wieviel % der Liste du schon durgewandert bist. Ich habe es so gelöst:

    Application.DoEvents()
            Dim path As String = "C:\Dokumente und Einstellungen\Benutzername\Eigene Dateien\"
            Dim datei() As String = IO.Directory.GetFiles(path, "*", IO.SearchOption.AllDirectories)
            'ProgressBar1.Maximum = datei.Length - 1
    
            For i = 0 To datei.Length - 1
                ListBox1.Items.Add(datei(i))
    
    
                If CInt(100 * i / (datei.Length - 1)) > ProgressBar1.Value Then
                    ProgressBar1.Value = CInt(100 * i / (datei.Length - 1)) 
    ProgressBar1.Refresh() End If Next
    Die if Schleife zum akualisieren des Fortschrittbalkens habe ich  eingefügt, damit das Element nicht bei jedem Durchlauf neu gezeichnet wird, sondern erst, wenn sich der Fortschritt um 1% (gerundet) erhöht. Dadurch konnte ich bei meinem Rechner den Verzeichnisinhalt um ~ 40% schneller darstellen.
    Bei diesem Code wird die Dateiliste nicht vor den Augen des Users aufgebaut, sondern erst angezeigt, wenn die Liste fertig übernommen wurde.
    Mittwoch, 22. April 2009 23:01

Alle Antworten

  • Was genau passiert beim Laden der Datei?
    Gibt es eine Schleife die durchrennt bis zum Dateiende?

    Progressbar ändern:
    progressbar1.Value = Fortschritt

    vorher musst du ggf.
    ProgressBar1.Minimun
    ProgressBar1.Maximun
    anpassen


    Freitag, 20. Februar 2009 17:27
  • um den Balken zu programmieren, würde ich auf 100% normieren,dh:

    progressbar1.Value = (100/ GesamtDaten) *geladene Daten

    so gibt der Balken die wirkliche geladene Datenmenge wieder.
    Vorraussetzung ist natürlich das man die gesamte Menge der Daten kennt.

    Ich hoffe es hilft weiter.
    Samstag, 4. April 2009 19:20
  • hmmm, ja. Und wie komme ich an die geladenen Daten?
    Mittwoch, 22. April 2009 16:48
  • Das kommt darauf an, mit welchem Mechanismus Du die Daten aus der Datei lädst. Welcher darf's denn sein?
    Mittwoch, 22. April 2009 18:28
  • Genau genommen, hole ich mir eine Dateiliste einiger Unterverzeichnisse via


    For

     

    Each Dateiliste As String In My.Computer.FileSystem.GetFiles("c:\DMSSRV\", FileIO.SearchOption.SearchAllSubDirectories)

    ListBox1.Items.Add(Dateiliste)

     

    Next

    Und das dauert natürlich etwas weshalb ich gerne ne ProgressBar hätte...

    Mittwoch, 22. April 2009 18:45
  • Meines erachtens musst du die Dateiliste zuerst in einem Array Speichern, da du sonst keine einfache Möglichkeit hast nachzuschauen wieviel % der Liste du schon durgewandert bist. Ich habe es so gelöst:

    Application.DoEvents()
            Dim path As String = "C:\Dokumente und Einstellungen\Benutzername\Eigene Dateien\"
            Dim datei() As String = IO.Directory.GetFiles(path, "*", IO.SearchOption.AllDirectories)
            'ProgressBar1.Maximum = datei.Length - 1
    
            For i = 0 To datei.Length - 1
                ListBox1.Items.Add(datei(i))
    
    
                If CInt(100 * i / (datei.Length - 1)) > ProgressBar1.Value Then
                    ProgressBar1.Value = CInt(100 * i / (datei.Length - 1)) 
    ProgressBar1.Refresh() End If Next
    Die if Schleife zum akualisieren des Fortschrittbalkens habe ich  eingefügt, damit das Element nicht bei jedem Durchlauf neu gezeichnet wird, sondern erst, wenn sich der Fortschritt um 1% (gerundet) erhöht. Dadurch konnte ich bei meinem Rechner den Verzeichnisinhalt um ~ 40% schneller darstellen.
    Bei diesem Code wird die Dateiliste nicht vor den Augen des Users aufgebaut, sondern erst angezeigt, wenn die Liste fertig übernommen wurde.
    Mittwoch, 22. April 2009 23:01