Partilhar via


Visão geral de eventos (Windows Forms .NET)

Um evento é uma ação à qual você pode responder ou "manipular" em código. Os eventos podem ser gerados por uma ação do usuário, como clicar com o mouse ou pressionar uma tecla, pelo código do programa ou pelo sistema.

Aplicações baseadas em eventos executam código em resposta a um evento. Cada formulário e controle expõe um conjunto predefinido de eventos contra os quais você pode programar. Se um desses eventos ocorrer e houver código de um manipulador de eventos associado, esse código será invocado.

Os tipos de eventos gerados por um objeto variam, mas muitos tipos são comuns à maioria dos controles. Por exemplo, a maioria dos objetos manipulará um evento Click. Se um usuário clicar em um formulário, o código no manipulador de eventos Click do formulário será executado.

Observação

Muitos eventos ocorrem em conjunto com outros eventos. Por exemplo, no decorrer do evento DoubleClick ocorrendo, os eventos MouseDown, MouseUpe Click ocorrem.

Para obter informações sobre como gerar e consumir um evento, consulte Manipulando e levantando eventos.

Os delegados e o seu papel

Delegados são classes comumente usadas no .NET para criar mecanismos de manipulação de eventos. Os delegados equivalem aproximadamente a ponteiros de função, comumente usados no Visual C++ e em outras linguagens orientadas a objetos. Ao contrário dos ponteiros de função, no entanto, os delegados são orientados a objetos, seguros para tipos e protegidos. Além disso, quando um ponteiro de função contém apenas uma referência a uma função específica, um delegado consiste em uma referência a um objeto e referências a um ou mais métodos dentro do objeto.

Esse modelo de evento usa delegados para vincular eventos aos métodos usados para manipulá-los. O delegado permite que outras classes se registrem para notificação de eventos especificando um método manipulador. Quando o evento ocorre, o delegado chama o método vinculado. Para obter mais informações sobre como definir delegados, consulte Manipulando e gerando eventos.

Os delegados podem ser vinculados a um único método ou a vários métodos, conhecidos como multicasting. Ao criar um representante para um evento, normalmente você cria um evento multicast. Uma exceção rara pode ser um evento que resulta em um procedimento específico (como exibir uma caixa de diálogo) que não se repetiria logicamente várias vezes por evento. Para obter informações sobre como criar um delegado multicast, consulte Como combinar delegados (Delegados Multicast).

Um delegado de multicast mantém uma lista de invocação dos métodos aos quais está vinculado. O delegado de multicast suporta um método Combine para adicionar um método à lista de invocação e um método Remove para removê-lo.

Quando um evento é registrado pelo aplicativo, o controle gera o evento invocando o delegado para esse evento. O delegado, por sua vez, chama o método vinculado. No caso mais comum (um delegado de múltipla difusão), o delegado chama cada método associado na lista de invocação por sua vez, o que fornece uma notificação um para vários. Essa estratégia significa que o controle não precisa manter uma lista de objetos de destino para notificação de eventos — o delegado lida com todos os registros e notificações.

Os delegados também permitem que vários eventos sejam associados ao mesmo método, permitindo uma notificação de muitos para um. Por exemplo, um evento button-click e um evento menu-command–click podem invocar o mesmo delegado, que então chama um único método para manipular esses eventos separados da mesma maneira.

O mecanismo de vinculação usado com delegados é dinâmico: um delegado pode ser vinculado em tempo de execução a qualquer método cuja assinatura corresponda à do manipulador de eventos. Com esse recurso, você pode configurar ou alterar o método acoplado dependendo de uma condição e anexar dinamicamente um manipulador de eventos a um controle.

Ver também