Udostępnij za pośrednictwem


Porady: ustawianie wartości wyświetlanej przez formant ProgressBar formularzy systemu Windows

Ważne

Kontrolka ToolStripProgressBar zastępuje i dodaje funkcje do ProgressBar kontrolki, jednak kontrolka ProgressBar jest zachowywana zarówno w celu zapewnienia zgodności z poprzednimi wersjami, jak i użycia w przyszłości, jeśli wybierzesz.

Program .NET Framework oferuje kilka różnych sposobów wyświetlania danej wartości w kontrolce ProgressBar . Wybrane podejście będzie zależeć od wybranego zadania lub problemu, który rozwiązujesz. W poniższej tabeli przedstawiono metody, które można wybrać.

Metoda opis
Ustaw wartość kontrolki ProgressBar bezpośrednio. Takie podejście jest przydatne w przypadku zadań, w których wiadomo, że łączna liczba mierzonych elementów będzie używana, na przykład odczytywanie rekordów ze źródła danych. Ponadto, jeśli musisz ustawić tylko wartość raz lub dwa razy, jest to łatwy sposób, aby to zrobić. Na koniec użyj tego procesu, jeśli chcesz zmniejszyć wartość wyświetlaną na pasku postępu.
ProgressBar Zwiększ wyświetlanie o stałą wartość. Takie podejście jest przydatne, gdy wyświetlasz prostą liczbę z przedziału od minimalnej do maksymalnej, takiej jak czas upłynął lub liczba plików, które zostały przetworzone z znanej sumy.
Zwiększ wyświetlanie o ProgressBar wartość, która się zmienia. Takie podejście jest przydatne, gdy trzeba zmienić wyświetlaną wartość kilka razy w różnych kwotach. Przykładem może być pokazana ilość używanego miejsca na dysku twardym podczas zapisywania serii plików na dysku.

Najbardziej bezpośrednim sposobem ustawienia wartości wyświetlanej przez pasek postępu jest ustawienie Value właściwości . Można to zrobić w czasie projektowania lub w czasie wykonywania.

Aby ustawić wartość ProgressBar bezpośrednio

  1. Ustaw wartości i kontrolki ProgressBarMinimum.Maximum

  2. W kodzie ustaw właściwość kontrolki Value na wartość całkowitą między ustalonymi wartościami minimalnymi i maksymalnymi.

    Uwaga

    Jeśli ustawisz Value właściwość poza granicami określonymi przez Minimum właściwości i Maximum , kontrolka zgłasza ArgumentException wyjątek.

    Poniższy przykład kodu ilustruje sposób bezpośredniego ustawiania ProgressBar wartości. Kod odczytuje rekordy ze źródła danych i aktualizuje pasek postępu i etykietę za każdym razem, gdy rekord danych jest odczytywany. Ten przykład wymaga, aby formularz miał kontrolkę Label , kontrolkę ProgressBar i tabelę danych z wierszem o nazwie CustomerRow i FirstNameLastName polami.

    Public Sub CreateNewRecords()  
       ' Sets the progress bar's Maximum property to  
       ' the total number of records to be created.  
       ProgressBar1.Maximum = 20  
    
       ' Creates a new record in the dataset.  
       ' NOTE: The code below will not compile, it merely  
       ' illustrates how the progress bar would be used.  
       Dim anyRow As CustomerRow = DatasetName.ExistingTable.NewRow  
       anyRow.FirstName = "Stephen"  
       anyRow.LastName = "James"  
       ExistingTable.Rows.Add(anyRow)  
    
       ' Increases the value displayed by the progress bar.  
       ProgressBar1.Value += 1  
       ' Updates the label to show that a record was read.  
       Label1.Text = "Records Read = " & ProgressBar1.Value.ToString()  
    End Sub  
    
    public void createNewRecords()  
    {  
       // Sets the progress bar's Maximum property to  
       // the total number of records to be created.  
       progressBar1.Maximum = 20;  
    
       // Creates a new record in the dataset.  
       // NOTE: The code below will not compile, it merely  
       // illustrates how the progress bar would be used.  
       CustomerRow anyRow = DatasetName.ExistingTable.NewRow();  
       anyRow.FirstName = "Stephen";  
       anyRow.LastName = "James";  
       ExistingTable.Rows.Add(anyRow);  
    
       // Increases the value displayed by the progress bar.  
       progressBar1.Value += 1;  
       // Updates the label to show that a record was read.  
       label1.Text = "Records Read = " + progressBar1.Value.ToString();  
    }  
    

    Jeśli wyświetlasz postęp, który jest kontynuowany przez stały interwał, możesz ustawić wartość, a następnie wywołać metodę, która zwiększa ProgressBar wartość kontrolki o ten interwał. Jest to przydatne w przypadku czasomierzy i innych scenariuszy, w których nie mierzysz postępu jako procentu całości.

Aby zwiększyć pasek postępu o stałą wartość

  1. Ustaw wartości i kontrolki ProgressBarMinimum.Maximum

  2. Ustaw właściwość kontrolki Step na liczbę całkowitą reprezentującą kwotę, aby zwiększyć wyświetlaną wartość paska postępu.

  3. Wywołaj metodę PerformStep , aby zmienić wartość wyświetlaną przez kwotę ustawioną Step we właściwości .

    Poniższy przykład kodu ilustruje, jak pasek postępu może zachować liczbę plików w operacji kopiowania.

    W poniższym przykładzie, ponieważ każdy plik jest odczytywany do pamięci, pasek postępu i etykieta są aktualizowane w celu odzwierciedlenia całkowitej liczby odczytanych plików. Ten przykład wymaga, aby formularz miał kontrolkę Label i kontrolkę ProgressBar .

    Public Sub LoadFiles()  
       ' Sets the progress bar's minimum value to a number representing  
       ' no operations complete -- in this case, no files read.  
       ProgressBar1.Minimum = 0  
       ' Sets the progress bar's maximum value to a number representing  
       ' all operations complete -- in this case, all five files read.  
       ProgressBar1.Maximum = 5  
       ' Sets the Step property to amount to increase with each iteration.  
       ' In this case, it will increase by one with every file read.  
       ProgressBar1.Step = 1  
    
       ' Dimensions a counter variable.  
       Dim i As Integer  
       ' Uses a For...Next loop to iterate through the operations to be  
       ' completed. In this case, five files are to be copied into memory,  
       ' so the loop will execute 5 times.  
       For i = 0 To 4  
          ' Insert code to copy a file  
          ProgressBar1.PerformStep()  
          ' Update the label to show that a file was read.  
          Label1.Text = "# of Files Read = " & ProgressBar1.Value.ToString  
       Next i  
    End Sub  
    
    public void loadFiles()  
    {  
       // Sets the progress bar's minimum value to a number representing  
       // no operations complete -- in this case, no files read.  
       progressBar1.Minimum = 0;  
       // Sets the progress bar's maximum value to a number representing  
       // all operations complete -- in this case, all five files read.  
       progressBar1.Maximum = 5;  
       // Sets the Step property to amount to increase with each iteration.  
       // In this case, it will increase by one with every file read.  
       progressBar1.Step = 1;  
    
       // Uses a for loop to iterate through the operations to be  
       // completed. In this case, five files are to be copied into memory,  
       // so the loop will execute 5 times.  
       for (int i = 0; i <= 4; i++)  
       {  
          // Inserts code to copy a file  
          progressBar1.PerformStep();  
          // Updates the label to show that a file was read.  
          label1.Text = "# of Files Read = " + progressBar1.Value.ToString();  
       }  
    }  
    

    Na koniec możesz zwiększyć wartość wyświetlaną na pasku postępu, aby każdy wzrost był unikatową kwotą. Jest to przydatne w przypadku śledzenia serii unikatowych operacji, takich jak zapisywanie plików o różnych rozmiarach na dysku twardym lub mierzenie postępu jako procent całości.

Aby zwiększyć pasek postępu o wartość dynamiczną

  1. Ustaw wartości i kontrolki ProgressBarMinimum.Maximum

  2. Wywołaj metodę Increment , aby zmienić wartość wyświetlaną przez liczbę całkowitą, którą określisz.

    Poniższy przykład kodu ilustruje, jak pasek postępu może obliczyć ilość miejsca na dysku podczas operacji kopiowania.

    W poniższym przykładzie, ponieważ każdy plik jest zapisywany na dysku twardym, pasek postępu i etykieta są aktualizowane w celu odzwierciedlenia ilości dostępnego miejsca na dysku twardym. Ten przykład wymaga, aby formularz miał kontrolkę Label i kontrolkę ProgressBar .

    Public Sub ReadFiles()  
       ' Sets the progress bar's minimum value to a number
       ' representing the hard disk space before the files are read in.  
       ' You will most likely have to set this using a system call.  
       ' NOTE: The code below is meant to be an example and  
       ' will not compile.  
       ProgressBar1.Minimum = AvailableDiskSpace()  
       ' Sets the progress bar's maximum value to a number
       ' representing the total hard disk space.  
       ' You will most likely have to set this using a system call.  
       ' NOTE: The code below is meant to be an example
       ' and will not compile.  
       ProgressBar1.Maximum = TotalDiskSpace()  
    
       ' Dimension a counter variable.  
       Dim i As Integer  
       ' Uses a For...Next loop to iterate through the operations to be  
       ' completed. In this case, five files are to be written to the disk,  
       ' so it will execute the loop 5 times.  
       For i = 1 To 5  
          ' Insert code to read a file into memory and update file size.  
          ' Increases the progress bar's value based on the size of
          ' the file currently being written.  
          ProgressBar1.Increment(FileSize)  
          ' Updates the label to show available drive space.  
          Label1.Text = "Current Disk Space Used = " &_
          ProgressBar1.Value.ToString()  
       Next i  
    End Sub  
    
    public void readFiles()  
    {  
       // Sets the progress bar's minimum value to a number
       // representing the hard disk space before the files are read in.  
       // You will most likely have to set this using a system call.  
       // NOTE: The code below is meant to be an example and
       // will not compile.  
       progressBar1.Minimum = AvailableDiskSpace();  
       // Sets the progress bar's maximum value to a number
       // representing the total hard disk space.  
       // You will most likely have to set this using a system call.  
       // NOTE: The code below is meant to be an example
       // and will not compile.  
       progressBar1.Maximum = TotalDiskSpace();  
    
       // Uses a for loop to iterate through the operations to be  
       // completed. In this case, five files are to be written  
       // to the disk, so it will execute the loop 5 times.  
       for (int i = 1; i<= 5; i++)  
       {  
          // Insert code to read a file into memory and update file size.  
          // Increases the progress bar's value based on the size of
          // the file currently being written.  
          progressBar1.Increment(FileSize);  
          // Updates the label to show available drive space.  
          label1.Text = "Current Disk Space Used = " + progressBar1.Value.ToString();  
       }  
    }  
    

Zobacz też