Instruções passo a passo: declarando e acionando eventos (Visual Basic)
Essa explicação passo a passo demonstra como declarar e gerar eventos para uma classe denominada Widget. Depois de completar os passos, você pode querer ler o tópico,Instruções passo a passo: tratando eventos (Visual Basic), que mostra como utilizar eventos a partir de objetos Widget para fornecer informações de status em um aplicativo.
A classe Widget
Suponha, por enquanto, que você tenha uma classe Widget. Sua classe Widgettem um método que pode levar bastante tempo para executar, e você deseja que o aplicativo seja capaz de colocar em backup algum tipo de indicador de conclusão.
É claro que você pode fazer o objeto Widget exibir uma caixa de diálogo percentualmente completa, mas depois você estaria preso a essa caixa de diálogo em cada projeto no qual você usasse a classe Widget . Um bom princípio de construção de objeto é deixar que o aplicativo que usa um objeto manipule a interface com o usuário - a não ser que o único propósito do objeto seja gerenciar um formulário ou uma caixa de diálogo.
O objetivo de Widget é realizar outras tarefas, de forma que seja melhor adicionar um evento PercentDone e deixar que o procedimento que chama os métodos Widget manipule esse evento e exiba atualizações de status. O evento PercentDone também pode fornecer um mecanismo para cancelar a tarefa.
Para criar o exemplo de código para este tópico
Abra um novo projeto de Aplicativo Windows Visual Basic e crie um formulário com o nome Form1.
Adicione dois botões e um título para Form1.
Nomeie os objetos como mostrado na tabela a seguir.
Object
Propriedade
Configuração
Button1
Text
Iniciar tarefa
Button2
Text
Cancel
Label
(Name), Text
lblPercentDone, 0
No menu Project, escolha Add Class para adicionar uma classe denominada Widget.vb ao projeto.
Para declarar um evento para a classe Widget
Use a palavra-chave Event para declarar um evento na classe Widget. Observe que um evento pode ter argumentos ByVal e ByRef, como o evento PercentDone de Widget demonstra.
Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Quando o objeto chamado recebe um evento PercentDone o argumento Percent contém a porcentagem da tarefa que já foi concluída. O argumento Cancel pode ser configurado para True para cancelar o método que gerou o evento.
Dica
Você pode declarar argumentos de evento da mesma forma que você faz argumentos de procedimentos, com as seguintes exceções: Eventos não podem ter argumentos Optional ou ParamArray, e eventos não têm valor de retorno.
O PercentDone evento é gerado pela LongTask método da Widget classe. LongTaskleva dois argumentos: o período de tempo o método finge estar fazendo o trabalho e o intervalo mínimo de tempo antes de LongTask faz uma pausa para elevar a PercentDone evento.
Para elevar o evento PercentDone
Para simplificar o acesso à propriedade Timer usada por essa classe, inclua uma declaração Imports no topo da seção de declarações do seu módulo de classe, acima da declaração Class Widget.
Imports Microsoft.VisualBasic.DateAndTime
Adicione o seguinte código à classe Widget:
Public Sub LongTask(ByVal Duration As Single, ByVal MinimumInterval As Single) Dim Threshold As Single Dim Start As Single Dim blnCancel As Boolean ' The Timer property of the DateAndTime object returns the seconds ' and milliseconds that have passed since midnight. Start = CSng(Timer) Threshold = MinimumInterval Do While CSng(Timer) < (Start + Duration) ' In a real application, some unit of work would ' be done here each time through the loop. If CSng(Timer) > (Start + Threshold) Then RaiseEvent PercentDone( Threshold / Duration, blnCancel) ' Check to see if the operation was canceled. If blnCancel Then Exit Sub Threshold = Threshold + MinimumInterval End If Loop End Sub
Quando seu aplicativo chama o método LongTask, a classe Widget gera o evento PercentDone a cada MinimumInterval segundos. Quando um evento retorna, LongTask verifica se o argumento Cancel foi modificado para True.
Algumas isenções são necessárias aqui. Para facilitar, o procedimento LongTask considera que você sabe, de antemão, quanto tempo a tarefa vai levar para ser completada. Isso é quase nunca o caso. Dividir tarefas em partes do mesmo tamanho pode ser difícil, e frequentemente o que mais importa aos usuários é simplesmente a quantidade de tempo que passa antes de obter uma indicação de que algo está acontecendo.
Você pode ter observado outra falha neste exemplo. A propriedade Timer retorna o número de segundos que passaram desde a meia-noite, portanto, o aplicativo trava se foi iniciado logo antes da meia-noite. Uma abordagem mais cuidadosa para medição de tempo, faria com que condições de contorno fossem levadas em consideração, ou evitadas simultaneamente, utilizando propriedades tais como Now.
Agora que a Widget classe pode elevar eventos, você pode mover para a próxima junto. Instruções passo a passo: tratando eventos (Visual Basic)Demonstra como usar WithEvents para associar um manipulador de eventos com o PercentDone evento.
Consulte também
Tarefas
Instruções passo a passo: tratando eventos (Visual Basic)