Carlos Mattos

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.

 

Comments

Roberto said:

Olá Carlos, primeiramente quero parabeniza-lo pelo artigo.

Gostaria de saber se é possível, disponibilizar o código desse exemplo?

Abraço

Roberto

# August 25, 2010 7:33 AM

Leonidas said:

Realmente faltou o código ser um pouco mais claro, o download do mesmo seria legal...

# June 10, 2011 7:32 AM

Leonidas said:

Gostaria de saber como implementar isso no C#, pois pelo exemplo acima eu não consegui.

email: leofjunior@gmail.com

Leonidas

# August 17, 2011 2:53 PM

Leonidas said:

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

Grato,

Leônidas

# August 24, 2011 8:48 AM
Leave a Comment

(required) 

(required) 

(optional)
 

(required) 

If you can't read this number refresh your screen
Enter the numbers above: