msdn13_capa.gif

Clique aqui para ler todos os artigos desta edição

Criando uma Barra de Progresso

por Duncan Mackenzie

Este artigo discute

Este artigo usa as seguintes tecnologias:

·          Controle personalizado

·          Interface com usuário

Visual Basic .NET

 

Download:

AdvancedBasics0410.exe (151KB)

Chapéu

Windows Form

 

 

Em muitas situações, estimar com precisão a duração de um determinado processo (copiar um arquivo grande, carregar dados a partir de um servidor, recuperar arquivos da Internet) pode ser igualmente difícil e ineficaz. No final das contas, o que existe é um processo que leva tempo suficiente para que o usuário aguarde, porém você não tem uma maneira fácil de indicar a porcentagem da tarefa que foi concluída. Uma barra de progresso regular seria um tanto menos sugestiva, e você precisaria de algum tipo de indicador "Working…".

O Windows® geralmente usa o ícone animado do Windows no canto superior direito do Microsoft® Internet Explorer durante a carga da página, e você pode criar e exibir seu próprio arquivo AVI ou GIF animado GIF se quiser personalizá-lo um pouco. Pessoalmente, prefiro usar uma abordagem mais flexível — um controle de barra de progresso animado e repetitivo. O uso de um controle me permite configurar a aparência da animação para diferentes aplicativos, e é muito mais fácil de incorporá-lo à UI de um Windows Forms.

Nesta artigo, vou ajudá-lo a implementar um controle de usuário personalizado — uma barra de progresso animada que executa círculos contínuos. O estilo próprio deste controle foi inspirado em uma noite que passei assistindo à UI de instalação do Windows XP. Ao final da instalação, os pequenos quadrados verdes hipnóticos haviam se fixado em meu cérebro, e senti uma necessidade incontrolável de tentar recriar alguma coisa semelhante em meu próprio controle. É claro, nem todo mundo gosta de quadrados verdes, por isso tentarei facilitar ao máximo a configuração da aparência do controle. O resultado será uma barra de progresso que exibe quadrados ou círculos e que expõe propriedades para controlar a velocidade da animação, o tamanho dos elementos gráficos, e muito mais (veja a Figura 1). O indicador de progresso propriamente dito será uma forma simples (círculo ou quadrado) desenhada de maneira um pouco maior do que o restante, que dará a impressão de se mover no controle em uma taxa fixa.

 

image001.gif

Figura 1 Minha Barra de Progresso

 

Que Tipo de Controle Você Deve Usar?

Quando desenvolvo com o Windows Forms, gosto de classificar o controle do desenvolvimento em três categorias: controles de usuário, controles herdados e controles personalizados. Os controles de usuário são os controles de estilo do Visual Basic® tradicional (pré-.NET), uma superfície de design na qual você combina vários outros controles. Os controles herdados permitem que você crie em cima de controles existentes, tais como o TextBox, escreva apenas o código de que precisa e obtenha toda a funcionalidade existente gratuitamente. Por fim, os controles personalizados herdam apenas da classe base do Control e são perfeitos para as situações em que você quer efetuar todo o trabalho gráfico por conta própria. Aqui, utilizo um controle personalizado porque não pretendo hospedar nenhum outro controle e estarei fazendo todo o desenho por conta própria.

Sempre que inicio um controle personalizado, crio um projeto Class Library e depois, inicio uma classe control com o código mostrado na Listagem 1. A classe mostrada herda de Control, que a transforma em um controle Windows Forms e permite que ela seja alojada corretamente dentro de um Form ou de outro container. O restante do código apenas configura o controle como desenhado pelo propritário, informando a ele que o meu código estará lidando com todo o desenho, que ele deverá ser redesenhado sempre que for redimensionado e que deverá usar um buffer duplo para reduzir a tremulosidade. Adicionei um atributo "DesignerCategory" ao início da classe apenas para facilitar o uso; ele faz com que o Visual Studio® abra essa classe na view de código por padrão, em vez de na view de design.

 

Listagem 1 Escrevendo um Novo Controle Personalizado

Imports System.Windows.Forms

Imports System.Drawing

 

_

Public Class NoProgressBar

  Inherits Control

...

Quer ler esse conteúdo completo? Tenha acesso completo