Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este passo a passo demonstra como declarar e gerar eventos para uma classe chamada Widget. Depois de concluir as etapas, convém ler o tópico complementar, Passo a passo: manipulando eventos, que mostra como usar eventos de objetos para fornecer informações de Widget status em um aplicativo.
A classe Widget
Suponha, por enquanto, que tem uma Widget classe. Sua Widget classe tem um método que pode levar muito tempo para ser executado, e você quer que seu aplicativo seja capaz de colocar algum tipo de indicador de conclusão.
Claro, poderia fazer com que o objeto Widget mostrasse uma caixa de diálogo indicando a percentagem completa, mas então ficaria sempre com essa caixa de diálogo em todos os projetos onde utilizasse a classe Widget. Um bom princípio de design de objeto é permitir que o aplicativo que usa um objeto manipule a interface do usuário, a menos que toda a finalidade do objeto seja gerenciar um formulário ou uma caixa de diálogo.
O propósito de Widget é executar outras tarefas, por isso é melhor adicionar um evento PercentDone e permitir que o procedimento que chama os métodos de Widget trate esse evento e exiba atualizações de status. O PercentDone evento 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 Visual Basic Windows Application e crie um formulário chamado
Form1.Adicione dois botões e um rótulo ao
Form1.Nomeie os objetos conforme mostrado na tabela a seguir.
Objeto Propriedade Configurações Button1TextIniciar tarefa Button2TextCancelar Label(Name),TextlblPercentDone, 0 No menu Projeto , escolha Adicionar classe para adicionar uma classe nomeada
Widget.vbao projeto.
Para declarar um evento para a classe Widget
Use a
Eventpalavra-chave para declarar um evento naWidgetclasse. Observe que um evento pode terByValeByRefargumentos, comoWidgeto evento doPercentDonedemonstra:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Quando o objeto chamador recebe um PercentDone evento, o Percent argumento contém a porcentagem da tarefa concluída. O Cancel argumento pode ser configurado para True anular o método que provocou o evento.
Observação
Você pode declarar argumentos de evento da mesma forma que declara argumentos de procedimentos, com as seguintes exceções: Eventos não podem ter Optional argumentos ou ParamArray e eventos não têm valores de retorno.
O PercentDone evento é gerado pelo LongTask método da Widget classe.
LongTask aceita dois argumentos: o período de tempo que o método finge estar a trabalhar e o intervalo de tempo mínimo antes de LongTask pausar para gerar o evento PercentDone.
Para aumentar o evento PercentDone
Para simplificar o acesso à propriedade
Timerusada por esta classe, adicione uma instruçãoImportsao topo da seção de declarações do seu módulo de classe, acima da instruçãoClass Widget.Imports Microsoft.VisualBasic.DateAndTimeAdicione o seguinte código à
Widgetclasse: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 a tua aplicação chama o método LongTask, a classe Widget gera o evento PercentDone a cada MinimumInterval segundos. Quando o evento retorna, LongTask verifica se o Cancel argumento foi definido como True.
Algumas isenções de responsabilidade são necessárias aqui. Para simplificar, o LongTask procedimento pressupõe que você saiba com antecedência quanto tempo a tarefa levará. Quase nunca é assim. Dividir tarefas em partes de tamanho uniforme pode ser difícil, e muitas vezes o que mais importa para os usuários é simplesmente a quantidade de tempo que passa antes que eles obtenham uma indicação de que algo está acontecendo.
Você pode ter detetado outra falha nesta amostra. A Timer propriedade retorna o número de segundos que passaram desde a meia-noite, portanto, o aplicativo fica preso se for iniciado pouco antes da meia-noite. Uma abordagem mais cuidadosa para medir o tempo levaria em consideração condições de contorno como esta, ou evitá-las completamente, usando propriedades como Now.
Agora que a Widget classe pode levantar eventos, você pode passar para o próximo passo a passo.
Passo a passo: Manipulando eventos demonstra como usar WithEvents para associar um manipulador de eventos ao PercentDone evento.