Como definir o valor exibido pelo controle ProgressBar dos Windows Forms
Importante
O controle ToolStripProgressBar substitui e adiciona funcionalidade ao controle ProgressBar; no entanto, o controle ProgressBar é mantido para compatibilidade com versões anteriores e uso futuro, se você escolher.
O .NET Framework oferece várias maneiras diferentes de exibir um determinado valor dentro do controle ProgressBar. Qual abordagem você escolher dependerá da tarefa em questão ou do problema que você está resolvendo. A tabela a seguir mostra as abordagens que você pode escolher.
Aproximação | Descrição |
---|---|
Defina o valor do controle ProgressBar diretamente. | Essa abordagem é útil para tarefas em que você sabe o total do item medido que será envolvido, como ler registros de uma fonte de dados. Além disso, se você precisar definir o valor apenas uma ou duas vezes, essa será uma maneira fácil de fazer isso. Por fim, use esse processo se precisar diminuir o valor exibido pela barra de progresso. |
Aumente o display ProgressBar por um valor fixo. | Essa abordagem é útil quando você está exibindo uma contagem simples entre o mínimo e o máximo, como o tempo decorrido ou o número de arquivos que foram processados de um total conhecido. |
Aumente a exibição do ProgressBar por um valor variável. | Essa abordagem é útil quando você precisa alterar o valor exibido várias vezes em quantidades diferentes. Um exemplo seria mostrar a quantidade de espaço em disco rígido sendo consumido durante a gravação de uma série de arquivos no disco. |
A maneira mais direta de definir o valor exibido por uma barra de progresso é definindo a propriedade Value. Isso pode ser feito em tempo de design ou em tempo de execução.
Para definir o valor do ProgressBar diretamente
Defina os valores Minimum e Maximum do controle ProgressBar.
No código, defina a propriedade Value do controle como um valor inteiro entre os valores mínimo e máximo que você estabeleceu.
Nota
Se você definir a propriedade Value fora dos limites estabelecidos pelas propriedades Minimum e Maximum, o controle gerará uma exceção ArgumentException.
O exemplo de código a seguir ilustra como definir o valor ProgressBar diretamente. O código lê registros de uma fonte de dados e atualiza a barra de progresso e o rótulo sempre que um registro de dados é lido. Este exemplo requer que seu formulário tenha um controle Label, um controle ProgressBar e uma tabela de dados com uma linha chamada
CustomerRow
com camposFirstName
eLastName
.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(); }
Se você estiver exibindo o progresso que prossegue por um intervalo fixo, poderá definir o valor e, em seguida, chamar um método que aumenta o valor do controle ProgressBar por esse intervalo. Isso é útil para temporizadores e outros cenários em que você não está medindo o progresso como uma porcentagem do todo.
Para aumentar a barra de progresso por um valor fixo
Defina os valores Minimum e Maximum do controle ProgressBar.
Defina a propriedade Step do controle como um inteiro que representa o valor para aumentar o valor exibido da barra de progresso.
Chame o método PerformStep para alterar o valor exibido pela quantidade definida na propriedade Step.
O exemplo de código a seguir ilustra como uma barra de progresso pode manter uma contagem dos arquivos em uma operação de cópia.
No exemplo a seguir, à medida que cada arquivo é lido na memória, a barra de progresso e o rótulo são atualizados para refletir o total de arquivos lidos. Este exemplo requer que seu formulário tenha um controle Label e um controle de 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(); } }
Por fim, você pode aumentar o valor exibido por uma barra de progresso para que cada aumento seja uma quantidade exclusiva. Isso é útil quando você está acompanhando uma série de operações exclusivas, como gravar arquivos de tamanhos diferentes em um disco rígido ou medir o progresso como uma porcentagem do todo.
Para aumentar a barra de progresso com um valor dinâmico
Defina os valores Minimum e Maximum do controle ProgressBar.
Chame o método Increment para alterar o valor exibido por um inteiro especificado.
O exemplo de código a seguir ilustra como uma barra de progresso pode calcular quanto espaço em disco foi usado durante uma operação de cópia.
No exemplo a seguir, à medida que cada arquivo é gravado no disco rígido, a barra de progresso e o rótulo são atualizados para refletir a quantidade de espaço em disco rígido disponível. Este exemplo requer que seu formulário tenha um controle Label e um controle de 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(); } }
Consulte também
.NET Desktop feedback