Barra de Progreso Personalizado
ProgressBar (VB.NET)

Fecha: 14/May/2005 (11/05/2005)
Autor: Carlos A. Reyes (creyes@uol.com.ar)

 


La realización del siguiente artículo surgió de la necesidad que tenía de mostrar una barra de progreso (ProgressBar) que fuera desde abajo hacia arriba, para lo cual el control ProgressBar que trae Visual Studio .NET no me servía, además quería que la barra de progreso fuera de otro color y ya estaba un poco aburrido de ver la barra de color azul oscuro con fondo gris, piense si alguna vez no le dio ganas de ver el color de la barra de otro color que no sea el azul por defecto. Otra cosa más que me preguntaba es, ¿porque hacer que la barra avance de izquierda a derecha y no en cualquier otro sentido?

Además de satisfacer las necesidades descritas antes, buscaba que sea sencillo, utilizando los controles que ya trae .NET. Después de tomarme un tiempo para pensar como poder realizarlo, logré mis objetivos trazados de una manera muy sencilla (como lo podrán ver en el código de ejemplo), con solo usar un control Panel (PanelBase) y dentro de este control coloco otro control Panel (PanelRelleno) que es el que uso para mostrar el avance.

El código de ejemplo está todo dentro del Form para una mejor visualización del ejemplo, pero los procedimientos (InicializarBarra, ActualizarBarra) pueden estar en una clase o en un módulo. Otra forma también se podría crear un Control Personalizado o un Control de Usuario y usarlo como cualquier otro control que viene en .NET, pero esto es según como le resulte más fácil al programador.

A continuación sigue código en Visual Basic:

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

#End Region

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'contador que sirve para incrementar el porcentaje de la barra de progreso
        Dim a As Long
        'contador que sirve para utilizarlo como retardo
        Dim b As Long

        'inicializo los valores de cada una de las barras de relleno
        InicializarBarra(PanelRellenoAmarillo, "H")
        InicializarBarra(PanelRellenoAzul, "H")
        InicializarBarra(PanelRellenoVerde, "V")
        InicializarBarra(PanelRellenoRojo, "V")

        For a = 0 To 100
            For b = 0 To 50000
            Next
            'incremento el porcentaje en cada una de las barras de progreso 

            'de izquierda a derecha
            ActualizarBarra(PanelRellenoAmarillo, PanelBaseAmarillo, "L", a)

            'de derecha a izquierda
            ActualizarBarra(PanelRellenoAzul, PanelBaseAzul, "R", a)

            'de abajo a arriba
            ActualizarBarra(PanelRellenoVerde, PanelBaseVerde, "B", a)

            'de arriba a abajo
            ActualizarBarra(PanelRellenoRojo, PanelBaseRojo, "T", a)
        Next
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'inicializo los valores de cada una de las barras de relleno
        InicializarBarra(PanelRellenoAmarillo, "H") 'de izquierda a derecha
        InicializarBarra(PanelRellenoAzul, "H") 'de derecha a izquierda
        InicializarBarra(PanelRellenoVerde, "V") 'de abajo a arriba
        InicializarBarra(PanelRellenoRojo, "V") 'de arriba a abajo
    End Sub

    Sub InicializarBarra(ByRef NombreBarraRelleno As Panel, ByVal PosicionBarra As String)
        ' Valores de PosicionBarra
        ' H = Horizontal; V(Vertical)

        If PosicionBarra.ToUpper = "H" Then
            NombreBarraRelleno.Width = 0
        Else
            If PosicionBarra = "V" Then
                NombreBarraRelleno.Height = 0
            Else
                MessageBox.Show("El valor del parámetro PosicionBarra no es válido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        End If
    End Sub

    Sub ActualizarBarra(ByRef NombreBarraRelleno As Panel, ByRef NombreBarraBase As Panel, _
        ByVal PuntoInicio As String, ByVal Valor As Integer)
        ' Valores de PuntoInicio
        ' R(Right) = de derecha a izquierda ; L(Left) = de izquierda a derecha ; 
        ' T(Top) = de arriba a abajo ; B(Bottom) = de abajo a arriba

        'variable que sirve para guardar el valor de la unidad en la barra de progreso
        Dim Unidad As Decimal

        If PuntoInicio.ToUpper = "R" Or PuntoInicio.ToUpper = "L" Then
            'guardo el valor de la unidad de la barra de relleno
            Unidad = NombreBarraBase.Width / 100
        Else
            If PuntoInicio.ToUpper = "T" Or PuntoInicio.ToUpper = "B" Then
                'guardo el valor de la unidad de la barra de relleno
                Unidad = NombreBarraBase.Height / 100
            End If
        End If
        Select Case PuntoInicio
            Case "R" 'de derecha a izquierda
                NombreBarraRelleno.Left = NombreBarraBase.Width - (Unidad * Valor)
                NombreBarraRelleno.Width = Unidad * Valor
            Case "L" 'de izquierda a derecha
                NombreBarraRelleno.Width() = NombreBarraRelleno.Left + (Unidad * Valor)
            Case "T" 'de arriba a abajo
                NombreBarraRelleno.Height() = NombreBarraRelleno.Top + (Unidad * Valor)
            Case "B" 'de abajo a arriba
                NombreBarraRelleno.Top = NombreBarraBase.Height - (Unidad * Valor)
                NombreBarraRelleno.Height() = Unidad * Valor
            Case Else
                MessageBox.Show("El valor del parámetro PuntoInicio no es válido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Select
    End Sub
End Class

 


Espero que el artículo les haya sido útil, si es así por favor colabora conmigo votando por este artículo en PanoramaBox. Gracias.


Fichero con el código de ejemplo: creyes_ProgressBar.zip - 9 KB


ir al índice