Criando Eventos Customizados no C#

Introdução


Necessidade comum no desenvolvimento de soluções Windows Forms é a criação de eventos personalizados. O desenvolvedor pode utilizar este recurso para gerenciar de forma mais eficiente o fluxo de execução do seu programa. Com eventos, podemos manter o usuário informado sobre o processamento executado pela aplicação e manter seu usuário informado é sem dúvida nenhuma uma boa prática. Os formulários e controles possuem eventos built-in que atendem as necessidades mais comuns das aplicações, contudo, a possibilidade de criarmos nossos próprios eventos nos permite melhorar a qualidade do software produzido.


 


Estrutura do Exemplo


O exemplo apresentado neste artigo foi elaborado sobre a seguinte estrutura:


  • Classe Base (frmBase.cs)
  • Formulário de Produtos (frmProdutos.cs)
  • Formulário MDI (mdiCadastro.cs)

A Classe Base implementa uma estrutura básica para operações CRUD. O aplicativo que consome esta classe utiliza o modelo tradicional de Multiple Document Interface (MDI). Assim, o formulário MDI implementado pela classe mdiCadastro.cs oferece as funcionalidades necessárias para manipular os métodos e eventos dos formulários filhos. No exemplo, temos um formulário de Produtos cujo método Salvar é invocado através da barra de ferramentas do formulário MDI. Implementamos um Evento Customizado (AoSalvar) para exibir uma mensagem logo após o botão Salvar da barra de ferramentas ser clicado pelo usuário.


 


 


Declarando Eventos e Atributos


A declaração de eventos é relativamente simples. Precisamos de um delegate (AoSalvarEventHandler), a própria declaração do evento (AoSalvar) e um método de apoio (RaiseAoSalvar) para disparar o evento quando desejado. O Quadro 1 apresenta o código necessário para esta implementação. Observe que a Linha 03 implementa os atributos Categoria e Descrição do evento customizado. Estas informações são apresentadas na Janela de Propriedades quando exibimos os eventos do formulário (Figura 1).


 


01: public delegate void AoSalvarEventHandler(object sender, EventArgs e);


02:


03: [Category("Bartender - CustomEvents"), Description("Ocorre sempre ...")]


04: public event AoSalvarEventHandler AoSalvar;


05:


06: public virtual void RaiseAoSalvar()


07: {


08:    AoSalvar(this, new EventArgs());


09: }


Quadro 1: Declarando Eventos e Atributos Customizados


  



Eventos Customizados


Figura 1 : Atribudos dos Eventos Customizados


 


Consumindo Eventos


O aplicativo utilizado no exemplo, consome o evento AoSalvar sempre que o usuário clica no botão Salvar da barra de ferramentas. O código deste botão é apresentado no Quadro 2, a linha em negrito destaca o método RaiseAposSalvar que dispara o evento imediatamente após o método SalvarRegistro ser executado. Neste fragmento de código, o objeto frmActiveChild corresponde ao formulário de Produtos instanciado pelo MDI.


 


……


case “Salvar”:


   if (this.ActiveMdiChild != null)


   {


      try


      {


         if (frmActiveChild.ValidarFormulario())


         {


            frmActiveChild.Validate();


            frmActiveChild.RaiseAoSalvar();


            frmActiveChild.SalvarRegistro();


            frmActiveChild.RaiseAposSalvar();


            frmActiveChild.Status = frmBase.FormStatus.Ocioso;


            AtualizarBarraFerramentas();


            frmActiveChild.DesativarControles();


            frmActiveChild.Refresh();


         }


}


…..


Quadro 2: Fragmento de código disparando o evento AoSalvar


 


 


Já no formulário de Produtos. O tratamento do evento disparado é simples e funciona da mesma forma como qualquer outro evento built-in. Você pode gerar o código para o EventHandler simplesmente clicando sobre a linha deste evento na Janela de Propriedades. Veja o Quadro 3 com o evento tratado.


 


private void frmProdutos_AoSalvar(object sender, EventArgs e)


{


MessageBox.Show(“Disparado o evento AoSalvar!”);


}


Quadro 3: Consumindo o Evento AoSalvar


 


Conclusão


Com este exemplo, você pode criar seus eventos personalizados e oferecer um feedback mais elegante e eficiente para os usuários das suas aplicações Windows Forms. Existe ainda a possibilidade de implementar eventos mais complexos incluindo informações peculiares ao evento customizado, consulte o MSDN para maiores informações.


 

4 thoughts on “Criando Eventos Customizados no C#”

  1. como implemento isso?… isto é, o que vai em cada formulário e classe?… Ficou meio confuso!…

    Grato,

    Leônidas

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>