Procedimiento para establecer el valor que muestra el control ProgressBar de formularios Windows Forms

Importante

El control ToolStripProgressBar reemplaza y agrega funcionalidad al control ProgressBar; sin embargo, el control ProgressBar se conserva a efectos de compatibilidad con versiones anteriores y uso futuro, en su caso.

.NET Framework proporciona diferentes maneras de mostrar un valor determinado dentro del control ProgressBar. El enfoque que elija dependerá de la tarea que deba realizar o del problema que esté solucionando. En la tabla siguiente se muestran los enfoques que puede elegir.

Enfoque Descripción
Establecer el valor del control ProgressBar directamente. Este enfoque es útil en tareas en las que se conoce el total del elemento medido que va a estar implicado, como la lectura de registros de un origen de datos. Además, si solo necesita establecer el valor una o dos veces, esta es una forma fácil de hacerlo. Por último, use este proceso si necesita reducir el valor mostrado por la barra de progreso.
Aumentar la visualización de ProgressBar según un valor fijo. Este enfoque es útil cuando se muestra un número simple comprendido entre un mínimo y un máximo, como el tiempo transcurrido o el número de archivos procesados de un total conocido.
Aumentar la visualización de ProgressBar según un valor variable. Este enfoque es útil cuando es necesario cambiar el valor mostrado varias veces en diferentes cantidades. Un ejemplo sería mostrar la cantidad de espacio en disco duro que se consume al escribir una serie de archivos en el disco.

La forma más directa de establecer el valor mostrado por una barra de progreso es estableciendo la propiedad Value. Esto se puede hacer en tiempo de diseño o en tiempo de ejecución.

Para establecer el valor de ProgressBar directamente

  1. Establezca los valores Minimum y Maximum del control ProgressBar.

  2. En el código, establezca la propiedad Value del control en un valor entero entre los valores mínimo y máximo que haya establecido.

    Nota:

    Si establece la propiedad Value fuera de los límites establecidos por las propiedades Minimum y Maximum, el control produce una excepción ArgumentException.

    En el ejemplo de código siguiente se muestra cómo establecer el valor de ProgressBar directamente. El código lee los registros de un origen de datos y actualiza la barra de progreso y la etiqueta cada vez que se lee un registro de datos. En este ejemplo se requiere que el formulario tenga un control Label, un control ProgressBar y una tabla de datos que tenga una fila denominada CustomerRow con los campos FirstName y LastName.

    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();  
    }  
    

    Si está mostrando el progreso según un intervalo fijo, puede establecer el valor y, a continuación, llamar a un método que aumente el valor del control ProgressBar según ese intervalo. Esto es útil con temporizadores y otros escenarios en los que no se mide el progreso como un porcentaje de un todo.

Para aumentar la barra de progreso según un valor fijo

  1. Establezca los valores Minimum y Maximum del control ProgressBar.

  2. Establezca la propiedad del control Step en un entero que represente la cantidad por la que va a aumentar el valor mostrado de la barra de progreso.

  3. Llame al método PerformStep para cambiar el valor mostrado por la cantidad establecida en la propiedad Step.

    En el ejemplo de código siguiente se muestra cómo una barra de progreso puede mantener un recuento de los archivos en una operación de copia.

    En el ejemplo siguiente, a medida que cada archivo se lee en la memoria, la barra de progreso y la etiqueta se actualizan para reflejar el total de archivos leídos. En este ejemplo se requiere que el formulario tenga un control Label y un control 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 último, puede aumentar el valor mostrado por una barra de progreso para que cada aumento sea una cantidad única. Esto es útil cuando se realiza un seguimiento de una serie de operaciones únicas, como escribir archivos de diferentes tamaños en un disco duro o medir el progreso como un porcentaje de un todo.

Para aumentar la barra de progreso según un valor dinámico

  1. Establezca los valores Minimum y Maximum del control ProgressBar.

  2. Llame al método Increment para cambiar el valor que aparece por un entero especificado.

    En el ejemplo de código siguiente se muestra cómo una barra de progreso puede calcular cuánto espacio en disco se ha usado durante una operación de copia.

    En el ejemplo siguiente, a medida que cada archivo se escribe en el disco duro, la barra de progreso y la etiqueta se actualizan para reflejar la cantidad de espacio disponible en el disco duro. En este ejemplo se requiere que el formulario tenga un control Label y un control 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 también