Como criar uma ProgressBar suave no Visual Basic .NET ou Visual Basic 2005

Para obter uma versão deste artigo do Microsoft Visual C# .NET, consulte
323116 .
Para obter uma versão deste artigo do Microsoft Visual Basic 6.0, consulte
190179 .

NESTA TAREFA

Sumário

Este artigo demonstra como criar um simples, personalizado UserControl para criar um, rolagem suave controle ProgressBar .

Em versões anteriores do controle ProgressBar , como a versão fornecida com o controle ActiveX de controles comuns do Microsoft Windows, você pode exibir o andamento em dois modos diferentes. Para controlar esses modos de exibição, você deve usar a propriedade de rolagem , que inclui configurações padrão e suaves. Rolagem suave produz um bloco sólido da cor que representa o progresso e rolagem padrão aparece segmentada e é composta de uma série de pequenos blocos ou retângulos.

O controle ProgressBar que acompanha o Visual Basic .NET ou Visual Basic 2005 oferece suporte somente a configuração padrão.

O código de exemplo neste artigo ilustra como criar um controle que suporta as seguintes propriedades:
  • Mínimo. Esta propriedade obtém ou define o menor valor para o intervalo de valores válidos para o andamento. O valor padrão desta propriedade é zero (0); Você não pode definir essa propriedade para um valor negativo.
  • Máximo. Esta propriedade obtém ou define o valor superior para o intervalo de valores válidos para o andamento. O valor padrão desta propriedade é 100.
  • Valor. Esta propriedade obtém ou define o nível atual de progresso. O valor deve estar no intervalo que definem o mínimo e as máximo propriedades.
  • ProgressBarColor. Esta propriedade obtém ou define a cor da barra de progresso.

Criar um controle ProgressBar personalizado

  1. Siga estas etapas para criar um novo projeto de biblioteca de controle do Windows no Visual Basic .NET ou Visual Basic 2005:
    1. Inicie o Microsoft Visual Studio .NET ou o Microsoft Visual Studio 2005.
    2. No menu Arquivo, aponte para Novo e, em seguida, clique em Projeto.
    3. Na caixa de diálogo New Project , clique em Projetos do Visual Basic em Project Typese, em seguida, clique em Windows Control Library em modelos.

      Observação: No 2005 Visual Studio, clique em Visual Basic em Tipos de projeto.
    4. Na caixa nome , digite SmoothProgressBare, em seguida, clique em OK.
    5. No Project Explorer, renomeie o módulo de classe padrão de UserControl1.vb para SmoothProgressBar.vb.
    6. Na janela Propriedades para o objeto UserControl , altere a propriedade Name de UserControl1 para SmoothProgressBar.
  2. Neste ponto, você geralmente herda da classe de controle e, em seguida, adiciona a funcionalidade adicional para estender um controle existente. No entanto, a classe ProgressBar é lacrado e não pode ser herdada. Portanto, você deve criar o controle do início.

    Adicione o seguinte código ao módulo de classe a
    UserControl, logo após a seção "Código gerado pelo Windows Form Designer":
    Private min As Integer = 0               ' Minimum value for progress rangePrivate max As Integer = 100             ' Maximum value for progress range
    Private val As Integer = 0 ' Current progress
    Private barColor As Color = Color.Blue ' Color of progress meter

    Protected Overrides Sub OnResize(ByVal e As EventArgs)
    ' Invalidate the control to get a repaint.
    Me.Invalidate()
    End Sub

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
    Dim g As Graphics = e.Graphics
    Dim brush As SolidBrush = New SolidBrush(barColor)
    Dim percent As Decimal = (val - min) / (max - min)
    Dim rect As Rectangle = Me.ClientRectangle

    ' Calculate area for drawing the progress.
    rect.Width = rect.Width * percent

    ' Draw the progress meter.
    g.FillRectangle(brush, rect)

    ' Draw a three-dimensional border around the control.
    Draw3DBorder(g)

    ' Clean up.
    brush.Dispose()
    g.Dispose()
    End Sub

    Public Property Minimum() As Integer
    Get
    Return min
    End Get

    Set(ByVal Value As Integer)
    ' Prevent a negative value.
    If (Value < 0) Then
    min = 0
    End If

    ' Make sure that the minimum value is never set higher than the maximum value.
    If (Value > max) Then
    min = Value
    min = Value
    End If

    ' Make sure that the value is still in range.
    If (val < min) Then
    val = min
    End If



    ' Invalidate the control to get a repaint.
    Me.Invalidate()
    End Set
    End Property

    Public Property Maximum() As Integer
    Get
    Return max
    End Get

    Set(ByVal Value As Integer)
    ' Make sure that the maximum value is never set lower than the minimum value.
    If (Value < min) Then
    min = Value
    End If

    max = Value

    ' Make sure that the value is still in range.
    If (val > max) Then
    val = max
    End If

    ' Invalidate the control to get a repaint.
    Me.Invalidate()
    End Set
    End Property

    Public Property Value() As Integer
    Get
    Return val
    End Get

    Set(ByVal Value As Integer)
    Dim oldValue As Integer = val

    ' Make sure that the value does not stray outside the valid range.
    If (Value < min) Then
    val = min
    ElseIf (Value > max) Then
    val = max
    Else
    val = Value
    End If

    ' Invalidate only the changed area.
    Dim percent As Decimal

    Dim newValueRect As Rectangle = Me.ClientRectangle
    Dim oldValueRect As Rectangle = Me.ClientRectangle

    ' Use a new value to calculate the rectangle for progress.
    percent = (val - min) / (max - min)
    newValueRect.Width = newValueRect.Width * percent

    ' Use an old value to calculate the rectangle for progress.
    percent = (oldValue - min) / (max - min)
    oldValueRect.Width = oldValueRect.Width * percent

    Dim updateRect As Rectangle = New Rectangle()

    ' Find only the part of the screen that must be updated.
    If (newValueRect.Width > oldValueRect.Width) Then
    updateRect.X = oldValueRect.Size.Width
    updateRect.Width = newValueRect.Width - oldValueRect.Width
    Else
    updateRect.X = newValueRect.Size.Width
    updateRect.Width = oldValueRect.Width - newValueRect.Width
    End If

    updateRect.Height = Me.Height
    ' Invalidate only the intersection region.
    Me.Invalidate(updateRect)
    End Set
    End Property

    Public Property ProgressBarColor() As Color
    Get
    Return barColor
    End Get

    Set(ByVal Value As Color)
    barColor = Value

    ' Invalidate the control to get a repaint.
    Me.Invalidate()
    End Set
    End Property

    Private Sub Draw3DBorder(ByVal g As Graphics)
    Dim PenWidth As Integer = Pens.White.Width

    g.DrawLine(Pens.DarkGray, _
    New Point(Me.ClientRectangle.Left, Me.ClientRectangle.Top), _
    New Point(Me.ClientRectangle.Width - PenWidth, Me.ClientRectangle.Top))
    g.DrawLine(Pens.DarkGray, _
    New Point(Me.ClientRectangle.Left, Me.ClientRectangle.Top), _
    New Point(Me.ClientRectangle.Left, Me.ClientRectangle.Height - PenWidth))
    g.DrawLine(Pens.White, _
    New Point(Me.ClientRectangle.Left, Me.ClientRectangle.Height - PenWidth), _
    New Point(Me.ClientRectangle.Width - PenWidth, Me.ClientRectangle.Height - PenWidth))
    g.DrawLine(Pens.White, _
    New Point(Me.ClientRectangle.Width - PenWidth, Me.ClientRectangle.Top), _
    New Point(Me.ClientRectangle.Width - PenWidth, Me.ClientRectangle.Height - PenWidth))
    End Sub

  3. No menu Build , clique em Build Solution para compilar o projeto.

Criar um aplicativo cliente de exemplo

  1. No menu Arquivo, aponte para Novo e, em seguida, clique em Projeto.
  2. Na caixa de diálogo Add New Project , clique em Projetos do Visual Basic em Project Types, clique em Windows Application em modelose, em seguida, clique em OK.
  3. Siga estas etapas para adicionar duas instâncias do controle SmoothProgressBar ao formulário:
    1. No menu Ferramentas , clique em Customize Toolbox.
    2. Clique na guia .NET Framework Components .
    3. Clique em Procurare localize o arquivo SmoothProgressBar.dll, que você criou na seção "Create a Custom ProgressBar Control".
    4. Clique em OK. Observe que o controle SmoothProgressBar é adicionado à caixa de ferramentas.
    5. Arraste duas instâncias do controle SmoothProgressBar da caixa de ferramentas para o formulário padrão do projeto Windows Application.
  4. Arraste um controle Timer da caixa de ferramentas para o formulário.
  5. Adicione o seguinte código para o evento Tick do controle Timer :
    If (Me.SmoothProgressBar1.Value > 0) Then    Me.SmoothProgressBar1.Value -= 1
    Me.SmoothProgressBar2.Value += 1
    Else
    Me.Timer1.Enabled = False
    End If

  6. Arraste um controle de botão da caixa de ferramentas para o formulário.
  7. Adicione o seguinte código ao evento Click do controle Button :
    Me.SmoothProgressBar1.Value = 100Me.SmoothProgressBar2.Value = 0

    Me.Timer1.Interval = 1
    Me.Timer1.Enabled = True

  8. No menu Debug , clique em Iniciar para executar o projeto de amostra.
  9. Clique no botão. Observe que os indicadores de dois progresso exibem o texto "andamento". Um indicador de progresso exibe o progresso de forma crescente, e o outro indicador de progresso exibe o progresso em uma diminuição ou uma forma de contagem regressiva.
Propriedades

ID do Artigo: 323088 - Última Revisão: 20 de fev de 2017 - Revisão: 1

Comentários