Compartilhando um evento entre múltiplos controles

Nesta dica vou falar sobre eventos e para começar uma pergunta básica:  Como lidar com o controle de eventos no VB.NET ?  

É claro que você deve saber que um gerenciador de evento lhe permite responder a notificações de um controle. Para você escolher um controle de evento com o qual deseja trabalhar , na janela de código , selecione o controle da lista de controles da janela de exibição de código . Como exemplo abaixo mostramos os eventos para o formulário form1.vb .

- Basta você selecionar o evento com o qual deseja trabalhar na lista suspensa.

Se você estiver se perguntando : Só temos estes eventos para um formulário ?  Eu vou lhe lembrar que todo o código esta dentro da classe formulário (No VB.NET tudo são classes , lembra ??? ) e  para acessar todos os eventos você tem que escolher a classe de Eventos Base - Base Class Events. (veja abaixo)

Mas o que eu quero realmente mostrar é uma característica muito importante na forma como no VB.NET um gerenciador de evento pode funcionar com múltiplos controles diferentes.

Até a versão 6 do VB , quando tínhamos que tratar com mais de controle com um evento , criávamos um array de controle que era identificado por um índice e associado ao evento chamado pelo controle. Dava um trabalhão !!!

No VB.NET um gerenciador de evento esta ligado a um evento pela palavra-chave - Handles - (alças). Esta palavra aparece no fim da definição. Veja abaixo o exemplo para o formulário form1.vb:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Como a ligação é feita pela palavra-chave Handles , podemos mudar o nome do evento sem causar nenhum problema , e, aproveitando isto podemos criar gerenciadores de eventos que trabalham com mais de um controle. Para isto basta acrescentar o nome dos controles á cláusula Handles e esta feito.  Entendeu ?  Vamos exemplificar para clarear...

1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : Eventos
  4. Location : c:\vbnet\Eventos

2- No formulário form1.vb inclua três controles Buttons . Os nomes para cada Button pode ser o nome padrão : Button1,Button2 e Button3. O aspecto do formulário é o seguinte :

 - Vamos agora  incluir o seguinte código no formulário:
Private Sub EventoMeusBotoes(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click

End Sub

Perceba que estamos compartilhando o evento Click com os três botões , mas como saber qual controle disparou o evento Click ?

Para isto vamos usar o objeto Sender. Este objeto é passando ao evento pelo Vb.NET e ele trata a referência ao objeto que disparou o evento basta então obter qual o controle que disparou o evento via objeto Sender . Para isto temos que fazer uma conversão de tipo de dados forçada ( um casting) . O código para o exemplo seria assim :

Private Sub MeusBotoes(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click

 

Dim botao As Button

botao = CType(sender, Button)

 

Select Case botao.Name

  Case "Button1"

     MsgBox("Voce pressionou o botão 1")

   Case "Button2"

     MsgBox("Voce pressionou o botão 2")

   Case "Button3"

     MsgBox("Voce pressionou o botão 3")

End Select

 

End Sub

Apenas fizemos um Cast ( conversão forçada) do objeto Sender para o tipo Button e verificamos o nome do botão. Ao executar o projeto e pressionar - Button2 - teremos:

Aguarde a próxima dica sobre o Vb.NET. Tchau ...


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti