Passo a passo: Tratamento de eventos (Visual Basic)
Este é o segundo dos dois tópicos que demonstram como trabalhar com eventos.O primeiro tópico, passo a passo: declarativo e geração de eventos, mostra como declarar e disparar eventos.Esta seção usa o formulário e classe essa explicação passo a passo para mostrar como manipular eventos quando eles ocorrem.
O Widget exemplo de classe usa instruções de manipulação de eventos tradicionais.Visual Basicfornece outras técnicas para trabalhar com eventos.Como um exercício, você pode modificar este exemplo para usar o AddHandler e Handles instruções.
Para manipular o evento PercentDone da classe Widget
Coloque o seguinte código em Form1:
Private WithEvents mWidget As Widget Private mblnCancel As Boolean
O WithEvents palavra-chave especifica que a variável mWidget é usado para manipular eventos de um objeto.Especifique o tipo de objeto, fornecendo o nome da classe da qual o objeto será criado.
A variável mWidget for declarado em Form1 porque WithEvents variáveis devem ser de nível de classe.Isso é verdadeiro independentemente do tipo da classe que você colocá-los em.
A variável mblnCancel é usado para cancelar a LongTask método.
Escrevendo código para manipular um evento
Assim que você declarar uma variável usando WithEvents, o nome da variável é exibido na lista suspensa à esquerda da classe O Editor de código.Quando você seleciona mWidget, o Widget eventos da classe aparecem na lista suspensa à direita.A seleção de um evento exibe o procedimento de evento correspondente, com o prefixo mWidget e um sublinhado.Os procedimentos de evento associados com um WithEvents variável recebem o nome da variável como um prefixo.
Para manipular um evento
Selecione mWidget na lista drop-down esquerda no O Editor de código.
Selecione o PercentDone o evento na lista suspensa à direita.O O Editor de código abre o mWidget_PercentDone procedimento de evento.
Observação O O Editor de código é útil, mas não é necessária, para inserir novos manipuladores de eventos.Esta explicação passo a passo, é mais direto para apenas copiar os manipuladores de eventos diretamente no seu código.
Adicione o seguinte código para o manipulador de eventos mWidget_PercentDone:
Private Sub mWidget_PercentDone( ByVal Percent As Single, ByRef Cancel As Boolean ) Handles mWidget.PercentDone lblPercentDone.Text = CInt(100 * Percent) & "%" My.Application.DoEvents() If mblnCancel Then Cancel = True End Sub
Sempre que o PercentDone evento é gerado, o procedimento de evento exibe a porcentagem concluída em um Label controle.O DoEvents método permite que o rótulo redesenhar e também fornece ao usuário a oportunidade de clique do Cancelar botão.
Adicione o seguinte código para o Button2_Click manipulador de eventos:
Private Sub Button2_Click( ByVal sender As Object, ByVal e As System.EventArgs ) Handles Button2.Click mblnCancel = True End Sub
Se o usuário clica o Cancelar botão enquanto LongTask está em execução, o Button2_Click evento é executado assim que o DoEvents instrução permite o processamento do evento ocorra.A variável de nível de classe mblnCancel for definido como Truee o mWidget_PercentDone evento, em seguida, testa e define o ByRef Cancel argumento para True.
Conectando-se a uma variável WithEvents para um objeto
Form1agora está configurado para lidar com um Widget eventos do objeto.Tudo o que resta é encontrar um Widget em algum lugar.
Quando você declara uma variável WithEvents em tempo de design, nenhum objeto é associado a ele.A WithEvents variável é assim como qualquer outra variável de objeto.Você deve criar um objeto e atribuir uma referência a ele com o WithEvents variável.
Para criar um objeto e atribui uma referência a ele
Selecione (Form1 Events) na lista drop-down esquerda no O Editor de código.
Selecione o Load o evento na lista suspensa à direita.O O Editor de código abre o Form1_Load procedimento de evento.
Adicione o seguinte código para o Form1_Load procedimento de evento para criar o Widget:
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles MyBase.Load mWidget = New Widget End Sub
Quando esse código é executado, Visual Basic cria um Widget de objeto e conecta seus eventos para os procedimentos de evento associados com mWidget.Partir desse ponto, sempre que o Widget eleva seu PercentDone evento, o mWidget_PercentDone o procedimento de evento é executado.
Para chamar o método LongTask
Adicione o seguinte código para o manipulador de eventos Button1_Click:
Private Sub Button1_Click( ByVal sender As Object, ByVal e As System.EventArgs ) Handles Button1.Click mblnCancel = False lblPercentDone.Text = "0%" lblPercentDone.Refresh() mWidget.LongTask(12.2, 0.33) If Not mblnCancel Then lblPercentDone.Text = CStr(100) & "%" End Sub
Antes do LongTask método é chamado, o rótulo que exibe a porcentagem concluída deve ser inicializado e o nível de classe Boolean sinalizar para cancelar o método deve ser definida como False.
LongTaské chamado com a duração de uma tarefa de 12.2 segundos.O PercentDone evento é gerado uma vez cada um terço de segundo.Sempre que o evento é disparado, o mWidget_PercentDone o procedimento de evento é executado.
Quando LongTask for feito, mblnCancel é testado para ver se LongTask foi encerrado normalmente, ou se ele parar porque mblnCancel foi definido como True.A porcentagem concluída é atualizada apenas no caso anterior.
Para executar o programa
Pressione F5 para colocar o projeto no modo de execução.
Clique no Iniciar tarefa botão.Cada vez que o PercentDone evento é gerado, o rótulo é atualizado com a porcentagem da tarefa concluída.
Clique no Cancelar o botão para interromper a tarefa.Observe que a aparência da Cancelar botão não altera imediatamente quando você clica nele.O Click evento não ocorre até o My.Application.DoEvents instrução permite o processamento do evento.
Observação O método My.Application.DoEvents não processa os eventos da exatamente a mesma forma como faz o formulário.Por exemplo, esta explicação passo a passo, você deve clicar na Cancelar botão duas vezes.Para permitir que o formulário manipular os eventos diretamente, você pode usar multithreading.Para obter mais informações, consulte Threading (C# e Visual Basic).
Talvez você ache instrutivo para executar o programa com F11 e depurar o código uma linha por vez.Você pode ver claramente como entrada de execução LongTaske reentrada brevemente Form1 cada vez que o PercentDone evento é gerado.
O que aconteceria se, enquanto a execução foi no código do Form1, o LongTask método foi chamado novamente?Na pior das hipóteses, um estouro de pilha pode ocorrer se LongTask foi chamada sempre que o evento foi gerado.
Você pode fazer com que a variável mWidget para manipular eventos para um diferente Widget o objeto, atribuindo uma referência para o novo Widget para mWidget.Na verdade, você pode tornar o código em Button1_Click fazer isso toda vez que você clicar no botão.
Para manipular eventos para um widget diferente
Adicione a seguinte linha de código para o Button1_Click procedimento, logo após a linha que lê mWidget.LongTask(12.2, 0.33):
mWidget = New Widget ' Create a new Widget object.
O código acima cria um novo Widget cada vez que o botão é clicado.Assim que o LongTask método for concluído, a referência para o Widget é liberado e o Widget é destruído.
A WithEvents variável pode conter a referência de apenas um objeto ao mesmo tempo, isso se você atribuir uma outra Widget o objeto para mWidget, o anterior Widget eventos do objeto não mais serão tratados.Se mWidget é a única variável de objeto que contém uma referência para o antigo Widget, o objeto é destruído.Se você deseja manipular eventos de várias Widget objetos, use o AddHandler a instrução para processar os eventos de cada objeto separadamente.
Observação |
---|
Você pode declarar tantos WithEvents variáveis de medida que você precisam, mas as matrizes de WithEvents variáveis não são suportadas. |
Consulte também
Tarefas
Passo a passo: Declarando e ordenando eventos (Visual Basic)