Demonstra Passo a passo: Tratamento de eventos

Este é o segundo dos dois tópicos que demonstram como trabalhar com eventos.O primeiro tópico, Passo-a-passo: Geração e declarativo eventos, mostra como declarar e disparar eventos.Esta seção usa o formulário e classe do passo-a-passo para mostrar como manipular eventos quando elas ocorrem.

The Widget exemplo de classe usa instruções de manipulação de eventos tradicionais. Visual Basic fornece outras técnicas para trabalhar com eventos. sistema autônomo um exercício, você pode modificar este exemplo para usar o AddHandler e Handles instruções.

Para manipular o evento PercentDone da classe do widget

  • Coloque o código a seguir em Form1:

    Private WithEvents mWidget As Widget
    Private mblnCancel As Boolean
    

    The WithEvents palavra-chave especifica que a variável mWidget é usado para manipular eventos do objeto. Especificar o tipo de objeto, fornecendo o nome da classe da qual o objeto será criado.

    A variável mWidget é declarado em Form1 porque WithEvents variáveis devem ser o nível de classe. Isso é verdadeiro independentemente do tipo de colocá-los na classe.

    A variável mblnCancel é usado para cancelar o LongTask método.

Escrever código para tratar um evento

Assim que você declare uma variável usando WithEvents, o nome da variável aparece no menu à esquerda lista a classe suspensa Editor de código.Quando você seleciona mWidget, o Widget eventos da classe aparecem na lista suspensa à direita. Selecione um evento para exibir o procedimento de evento correspondente, com o prefixo mWidget e um sublinhado. Todos sistema autônomo procedimentos de evento associados com um WithEvents variável recebem o nome da variável sistema autônomo um prefixo.

Para manipular um evento

  1. selecionar mWidget no esquerdo lista suspensa o Editor de código.

  2. selecionar o PercentDone evento a partir da lista suspensa à direita. The Editor de código a é abertomWidget_PercentDone procedimento de evento.

    Observação:

    O Editor de código é útil, mas não é necessária, para inserir novos evento manipuladores.Nesta explicação passo a passo, é mais direto para copiar apenas o evento manipuladores diretamente em seu código.

  3. 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. The DoEvents método permite que o rótulo a ser redesenhado e também oferece ao usuário a oportunidade para clicar na Cancelar botão.

  4. 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á sendo executado, o Button2_Click evento é executado assim que o DoEvents demonstrativo permite o processamento de evento ocorra. O nível de classe variável mblnCancel é conjunto para Truee o mWidget_PercentDone evento testa em seguida, ele e conjunto s a ByRef Cancel argumento para True.

Conectando-se uma variável WithEvents a um objeto

Form1 Agora é conjunto até a alça de um Widget eventos do objeto. Tudo o que permanece é encontrar um Widget em algum lugar.

Quando você declara uma variável WithEvents em time de design, nenhum objeto é associado ele. A WithEvents variável é como qualquer Outros 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

  1. selecionar (Form1 Events) na lista drop-down à esquerda do Editor de código.

  2. selecionar o Load evento a partir da lista suspensa à direita. The Editor de código a é abertoForm1_Load procedimento de evento.

  3. 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 objeto e conecta seus eventos os procedimentos de evento associado mWidget. Desse ponto, sempre que o Widget eleva seu PercentDone evento, o mWidget_PercentDone 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 conjunto para False.

LongTask é chamado com duração de uma tarefa de segundos 12.2. The PercentDone evento é disparado uma vez cada um terço de um segundo. Cada time o evento é disparado, o mWidget_PercentDone procedimento de evento é executado.

Quando LongTask é concluído, mblnCancel testado para ver se LongTask finalizado normalmente, ou se ele parou porque mblnCancel foi definido como True. A porcentagem concluída é atualizada apenas no caso anterior.

Para executar o programa

  1. Pressione F5 para colocar o projeto no modo de execução.

  2. clicar no Iniciar tarefa botão.Cada time o PercentDone evento é gerado, o rótulo é atualizado com a porcentagem da tarefa for concluída.

  3. clicar no Cancelar botão para interromper a tarefa.Observe que a aparência do Cancelar botão não altera imediatamente quando você clica nele.The Click evento não pode ocorrer até que o My.Application.DoEvents demonstrativo permite que o processamento de eventos.

    Observação:

    O My.Application.DoEvents método não processa eventos exatamente da mesma forma sistema autônomo o formulário. Por exemplo, nesta explicação passo a passo, você deve clicar a 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 Multithreading no Visual Basic.

Talvez você ache instrutivo para executar o programa com F11 e a etapa através do código uma linha em um time.Você pode ver claramente como execução entrada LongTaske uma breve re-enters Form1 cada time o PercentDone evento é gerado.

O que aconteceria se, enquanto estava execução novamente no código de Form1, o LongTask método foi chamado novamente?Na pior das hipóteses, um estouro de pilha pode ocorrer se LongTask foram chamados cada time o evento foi gerado.

Você pode fazer com que a variável mWidget para manipular eventos para um diferente Widget objeto atribuindo uma referência para o novo Widget para mWidget. Na verdade, você pode tornar o código Button1_Click Isso cada time clicar no botão.

Para manipular eventos para um widget diferente

  • Adicione a seguinte linha de código para o Button1_Click procedimento, imediatamente antes da 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 sempre que o botão é clicado. sistema autônomo logo sistema autônomo o LongTask método for concluído, a referência para o Widget é relesistema autônomoed e o Widget é destruído.

A WithEvents variável pode conter apenas um objeto de referência ao mesmo time, portanto, se você atribuir um diferente Widget objeto para mWidget, o anterior Widget eventos do objeto não serão tratados. If mWidget é a única variável de objeto que contém uma referência à antiga Widget, o objeto é destruído. Se você desejar manipular eventos de vários Widget objetos, usar o AddHandler demonstrativo para processar eventos de cada objeto separadamente.

Observação:

Você pode declarar sistema autônomo muitos WithEvents variáveis de medida que você precisam, mas matrizes de WithEvents Não há suporte para sistema autônomo variáveis.

Consulte também

Tarefas

Demonstra Passo a passo: Declarando e disparando eventos 

Como: Escrever manipuladores evento

Conceitos

Eventos e manipuladores de eventos

Delegados e o operador AddressOf

AddHandler e RemoveHandler

Referência

Trata

WithEvents

Outros recursos

Polimorfismo