Barra de Progreso Personalizado Fecha: 14/May/2005 (11/05/2005)
|
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