msdn22-revista.jpg

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

 

Descubra uma Série de Manipuladores de Eventos Úteis no Visual Basic

por Ken Getz

Este artigo discute

Este artigo usa as seguintes tecnologias:

·          Como funcionam os eventos no Visual Basic 6.0, Visual Basic .NET e Visual Basic 2005

·          Como são compilados os eventos no Visual Basic .NET

·          Exceções e invocação manual de manipuladores de evento

·          Escrevendo eventos personalizados

Visual Basic, .NET Framework

 

Download:

EventHandling.exe (158KB)

Chapéu

Visual Basic

 

 

Os eventos são parte integral de seu arsenal de códigos, independentemente de você usar o Visual Basic® 6.0, o Visual Basic .NET 2002, o Visual Basic .NET 2003 ou o Visual Basic 2005. Os formulários e controles acionam os eventos e seu código manipula esses eventos. O primeiro aplicativo que você escreveu no Visual Basic provavelmente exigia o posicionamento de um botão em um formulário, a manipulação de um evento click e a exibição do mesmo texto em uma caixa de alerta quando você clicasse no botão em tempo de execução. O que poderia ser mais fácil?

Mas o quanto você entende efetivamente de eventos? O que está acontecendo quando você adiciona um manipulador de eventos a uma classe? Neste artigo demonstrarei diversas maneiras de interagir com os eventos e manipuladores de eventos e como eles podem resolver problemas comuns. Provavelmente, algumas dessas informações não são novas para você — mas se você leva os eventos ao pé da letra, poderá ter algumas surpresas. Em ambos os casos, faça o download dos dois aplicativos de exemplo (um para o Visual Basic .NET .2002 e 2003 e outro para o Visual Basic 2005) e siga as instruções. Todo o conteúdo se aplica ao Visual Basic .NET 2002 e 2003 e ao Visual Basic 2005, com exceção da seção final sobre eventos personalizados, que funciona somente no Visual Basic 2005.

Presumirei que você tenha algum conhecimento básico sobre delegates e delegates de multicasting. Caso ainda não tenha investigado esses recursos importantes do Microsoft® .NET Framework, é hora de fazê-lo. Para obter mais informações, confira a visão geral sobre delegates de Ted Pattison, apresentada em duas etapas (Basic Instincts: Implementing Callback Notifications Using Delegates (http://msdn.microsoft.com/msdnmag/issues/02/12/BasicInstincts) e Basic Instincts: Implementing Callbacks with a Multicast Delegate (http://msdn.microsoft.com/msdnmag/issues/03/01/BasicInstincts)).

 

Eventos

O Visual Basic (antes do Visual Basic .NET) fornecia mecanismos simples para você criar e manipular eventos, e o Visual Basic .NET 2002 e 2003 oferecia várias maneiras de fazer ambas as coisas. O Visual Basic 2005 permite ainda mais controle sobre os manipuladores de evento, como você verá neste artigo.

Os eventos fornecem um mecanismo loosely coupled que permite que as classes se registrem para notificações que possam ou não ocorrer em algum momento no futuro. Se os "listeners" forem notificados da ocorrência de um evento pelo qual estejam esperando, eles lidarão com a situação. Caso contrário, eles apenas prosseguirão com a escuta. Um manipulador de eventos de clique no botão se registra com a classe que está fornecendo a funcionalidade do botão; quando um usuário clica no botão, a classe deste aciona o evento Click, todos os escutadores (podem existir vários manipuladores de evento Click para o botão) executam seus códigos, e a execução do código prossegue.

Meu aplicativo de exemplo inclui uma série de classes (FileSearch1 a FileSearch5 para o Visual Basic .NET 2002 e 2003, e FileSearch1 a FileSearch6 para o Visual Basic 2005) que procuram arquivos em um local especificado e acionam um evento quando os encontram. As classes FileSearch simplesmente desejam permitir que qualquer classe que esteja escutando saiba quando alguma coisa interessante acontece. Neste caso, a coisa interessante ocorre a cada vez que a classe FileSearch encontra outro arquivo. Qualquer número de classes listener pode querer reagir a este evento.

Em termos de .NET, uma classe pode acionar um evento a qualquer momento durante a execução de seu código. Outras classes podem inscrever-se para o evento e serem notificadas da ocorrência deste pelo .NET Framework. A classe que aciona o evento geralmente não tem conhecimento de quantos escutadores existem (se houver), embora ela possa reunir essas informações com pouco esforço, como você verá posteriormente neste artigo. Além disso, vários escutadores podem registrar-se para serem notificados, e cada um deles pode ser notificado sem o conhecimento do outro escutador.

 

Fazendo as Coisas da Maneira do Visual Basic 6.0

Os designers do .NET Framework e a linguagem do Visual Basic .NET percorreram um grande caminho para assegurar que você pudesse tratar os eventos no .NET da mesma forma que o fazia no Visual Basic 6.0. Ou seja, você pode:

      Declarar um evento usando a palavra-chave Event;

      Acionar o evento usando a declaração RaiseEvent;

      Tratar o evento usando uma variável WithEvents.

 

A verdadeira diferença do .NET é o mecanismo subjacente. Ao contrário de usar algum mecanismo oculto no Visual Basic 6.0, o Visual Basic .NET usa um mecanismo visível, extensível e comum — os delegates — para gerenciar o tratamento de eventos.

Outra diferença entre o Visual Basic 6.0 e a versão do Visual Basic .NET é que, no .NET, você pode usar a cláusula Handles para indicar que uma procedure seja executada em resposta a um evento específico. A cláusula Handles permite que qualquer procedure que coincida com a assinatura de parâmetro do evento reaja ao evento. Isso soa muito como um delegate e, por baixo do pano, é. Em tempo de compilação, o .NET Framework cria uma classe Delegate com o nome do evento, adicionando o texto "EventHandler" ao final. Por exemplo, quando você declara um evento denominado FileFound, o .NET Framework cria um tipo de delegate FileFoundEventHandler para você. Toda procedure que trata esse evento precisa ter uma assinatura que coincida com o tipo de delegate. Você verá um exemplo deste conceito posteriormente neste artigo.

Um clique em RaiseEvent no formulário de exemplo demonstra como o Visual Basic .NET suporta o tratamento de eventos encontrado no Visual Basic 6.0. O projeto de exemplo inclui a classe FileSearch1, que usa o seguinte código para configurar o evento:

 

' No FileSearch1.vb

Public Class FileSearch1

    ' Procure os arquivos nos locais especificados.

...

Quer ler esse conteúdo completo? Tenha acesso completo