VB.NET - Usando o componente ProgressBar


O controle ProgessBar indica visualmente o progresso de uma operação com o passar de um intervalo de tempo. Você pode usá-lo em operações de cópia de arquivos , conexão com a internet , acesso a banco de dados , operações com registros de tabelas , etc.

A classe ProgressBar possui quatro propriedades que são comumente usadas e que não são herdadas do controle ou outra classe base.

Propriedade Valor do Tipo Descrição
Maximum Integer O valor máximo do intervalo exibido no controle. O valor padrão é 100 - Read/Write.
Minimum Integer O valor mínimo do intervalo exibido pelo controle. O valor padrão é 0. Read/Write.
Step Integer A quantidade pela qual a barra de progresso é incrementada quanto o método PerformStep é chamado. Valor padrão é zero. Read/Write.
Value Integer A posição atual da barra de progresso. O valor padrão é zero. Read/Write.

Além destas propriedades o controle possui dois métodos que são geralmente usados:

Vou mostrar um exemplo simples de utilização do controle ProgressBar em um formulário e para isto vou usar o SharpDevelop como ambiente de desenvolvimento.

Nota :  Se você ainda não tem o SharpDevolp instalado acesso o link - http://www.sharpdevelop.com/OpenSource/SD/Download/ - e baixe a versão mais recente (5931 Kb). È preciso ter o . NET Framework 1.1 instalado em sua máquina. Você terá uma ótima ferramenta para desenvolver aplicações para a plataforma .NET em C# e VB.NET; uma ferramenta open source  (GPL), s e tem uma localização para o Português.

Após ter instalado o SharpDevelop abra o IDE e no menu de opções selecione : Arquivo-Novo-Combine

Na janela Novo Projeto selecione :

O projeto irá constar de um formulário , um botão de comando(Iniciar) , uma Label e um controle ProgressBar.

Ao clicar no botão é disparado um contador que conta até 10.000. A cada 100 é exibido o valor na Label e a barra de Progresso é atualizada. Abaixo temos as figuras da estrutura da aplicação e da mesma em execução:

Agora insira o seguinte código no projeto:

Option Strict On

imports System
imports System.Drawing
imports System.Windows.Forms
namespace Macoratti	
	Public Class BarradeProgresso
		            inherits Form
		dim pb as ProgressBar 
		dim lbl as Label
		public sub New()
                                      Text = "Barra de Progresso"
			Size = new Size(300,200)
			dim btn as new Button()
			btn.Parent = me
			btn.Text = "&Iniciar"
			btn.Location = new Point(CType((Size.Width / 2) - (btn.Width / 2), integer), _
					         CType((Size.Height / 4) - btn.Height, Integer))
			AddHandler btn.Click, AddressOf btn_OnClick
			lbl = new Label()
			lbl.Parent = me
			lbl.Size = new Size(100,23)
			lbl.Location = new Point(CType((Size.Width / 2) - (lbl.Width / 2), integer), 	btn.Bottom + 25)
			lbl.BorderStyle = BorderStyle.FixedSingle
			lbl.TextAlign = ContentAlignment.MiddleCenter
			lbl.Text = ""
			pb = new ProgressBar()
			pb.Parent = me
			pb.Location = new Point(CType((Size.Width / 8), integer), lbl.Bottom + 25)
			pb.Size = new Size(CType((Size.Width * 3 / 4), integer), 20) 
			pb.Minimum = 0		            '  o valor padrao
			pb.Maximum = 100		            '  o valor padrao
		end sub                                                     'fecha o construtor
		private sub btn_OnClick(ByVal sender as object, ByVal e as EventArgs)

			dim limite as integer = 10000
			dim cntr as integer = 0
			dim i as integer

			pb.Value = 0
			pb.Step = 1
			
                                       for i = 0 to limite
				cntr  = cntr + 1
				if cntr mod 100 = 0 then
					lbl.Text = cntr.ToString()
					pb.PerformStep()
					Application.DoEvents()
					System.Threading.Thread.Sleep(40)
				end if
			next
		end sub
		public shared sub Main() 
			Application.Run(new BarraDeProgresso())
		end sub
	end class
end namespace

Pela estrutura da aplicação percebemos que a barra de progresso (pb) e a Label (lbl) foram declaradas como membros da classe BarraDeProgresso.

No construtor da classe BarraDeProgresso os controles Label , ProgressBar e Button são instanciados e a seguir definimos os valores para localização , tamanho e outras propriedades pertinentes a cada controle. No caso do controle ProgressBar definimos também os valores para Máximo e Mínimo para os valores padrão.

No evento Click do botão de comando além de definirmos o valor de limite da barra de progresso definimos também que a barra de progresso e a etiqueta (Label) serão atualizados a cada 100 valores contados. Isto é feito no seguinte trecho de código :

 for i = 0 to limite
     cntr  = cntr + 1
     if cntr mod 100 = 0 then
	   lbl.Text = cntr.ToString()
	   pb.PerformStep()
	   Application.DoEvents()
	   System.Threading.Thread.Sleep(40)
     end if
next

A cada valore de 100 contados ( cntr mod 100) a label e o controle ProgressBar são atualizados.

A seguir chamamos o método estático Application.DoEvents() para permitir que o formulário desenha a si mesmo sem ter que esperar até que o evento Click termine o seu processamento. Se você não chamar o método DoEvents() você não verá a label ser atualizada.

A linha de código System.Threading.Thread.Sleep(40) introduz uma pausa de 40 milisegundos a cada 100 valores contados de forma a permitir que o processamento ocorra em uma velocidade que possa ser observado.

Você pode substituir a linha de código que chama o método PerformSetp por pb.Increment(1) , basta remover também a linha de código que define a propriedade Step. O código ficaria assim :

 for i = 0 to limite
     cntr  = cntr + 1
     if cntr mod 100 = 0 then
	   lbl.Text = cntr.ToString()
	   pb.Increment(1)
	   Application.DoEvents()
	   System.Threading.Thread.Sleep(40)
     end if
next

Se você quiser usar o Visual Studio Net , crie um novo projeto do tipo Windows Application e no formulário inclua os controles conforme indicados e no evento click do botão de comando inclua o código abaixo:

 Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click
        Dim limite As Integer = 10000
        Dim cntr As Integer = 0
        Dim i As Integer
        pb.Value = 0
        pb.Step = 1
        For i = 0 To limite
            cntr = cntr + 1
            If cntr Mod 100 = 0 Then
                lbl.Text = cntr.ToString()
                pb.PerformStep()
                Application.DoEvents()
                System.Threading.Thread.Sleep(40)
            End If
        Next
    End Sub

Até o próximo artigo VB.NET

Veja os Destaques e novidades do SUPER DVD VB  (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C#  com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

        Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti