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
Siga estas etapas para criar uma nova biblioteca de controle do Windows projeto em Visual Basic.NET ou em Visual Basic 2005:
Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
No menu arquivo , aponte para novo e, em seguida, clique em Project .
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 .
Na caixa nome , digite SmoothProgressBar e, em seguida, clique em OK .
No Project Explorer, renomeie o módulo de classe padrão do UserControl1.vb para SmoothProgressBar.vb.
Na janela Properties para o objeto UserControl , altere a propriedade Name de UserControl1 para SmoothProgressBar .
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
No menu Build , clique em Build Solution para compilar o projeto.
Criar um aplicativo de cliente de exemplo
No menu arquivo , aponte para novo e, em seguida, clique em Project .
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 .
Siga estas etapas para adicionar duas instâncias do controle SmoothProgressBar ao formulário:
No menu Ferramentas , clique em Customize Toolbox .
No menu Debug , clique em Iniciar para executar o projeto de exemplo.
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.
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
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.