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

Traduções deste artigo Traduções deste artigo
ID do artigo: 323088 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo demonstra como criar um simples, personalizado UserControl para criar uma suavização, rolagem controle ProgressBar .

Em versões anteriores do controle ProgressBar , como a versão é fornecido 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, use 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 segmentado e é composto 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 suporte as seguintes propriedades:
  • mínimo . Esta propriedade obtém ou define o valor inferior para o intervalo de valores válidos para o andamento. O valor padrão dessa 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 dessa propriedade é 100.
  • valor . Essa propriedade obtém ou define o nível atual de andamento. O valor deve estar no intervalo que definem propriedades máxima e mínima .
  • ProgressBarColor . Esta propriedade obtém ou define a cor da barra de progresso.

Criar um controle de ProgressBar personalizado

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

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

    Adicione o seguinte código ao módulo de classe do UserControl , logo após a seção "Windows Form Designer gerou código":
    Private min As Integer = 0               ' Minimum value for progress range
    Private 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 de cliente de exemplo

  1. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  2. Na caixa de diálogo Add New Project , clique em Projetos do Visual Basic em Project Types , clique em Windows Application em modelos e, 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 Procurar e 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 Windows Application projeto.
  4. Arraste um controle Timer da caixa de ferramentas para o formulário.
  5. Adicione o seguinte código ao 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 de botão :
    Me.SmoothProgressBar1.Value = 100
    Me.SmoothProgressBar2.Value = 0
    
    Me.Timer1.Interval = 1
    Me.Timer1.Enabled = True
    					
  8. No menu Debug , clique em Iniciar para executar o projeto de exemplo.
  9. Clique no botão. Observe que os indicadores de dois progresso exibir 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: quarta-feira, 6 de dezembro de 2006 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic 2005
Palavras-chave: 
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB323088 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 323088

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com