Adicionar Evento Dinamicamente em Componente em C#

Algo as vezes chato de lembrar, mas que é bem tranquilo é adicionar evento dinamicamente em componentes. Um exemplo simples é você fazer uma consulta em um banco de dados, ou em um xml e querer popular algo com as informações, porém adicionando eventos de click, checked, unchecked, initialized, etc para cada item adicionado.

Uma maneira bem simples disso é fazer um cast do objeto sender do evento para saber qual foi o objeto que enviou o evento. Abaixo tem um exemplo com Expander adicionando CheckBox e o evento Checked do WPF, porém a idéia é válida para Buttons, Menus, etc tanto do WPF quanto do Windows.Forms

// adiciona os checkboxes no expander
private void opcoesExpander_Initialized(object sender, EventArgs e)
{
	expanderStackPanel.Children.Add(new Separator());
	foreach (SeuObjeto item in SeuArrayDeItens)
	{
		CheckBox checkbox = new CheckBox();
		checkbox.Content = item.Texto;
		checkbox.Checked += new RoutedEventHandler(checkbox_Checked);
		checkbox.Unchecked += new RoutedEventHandler(checkbox_Unchecked);
		checkbox.Margin = new Thickness(5);
		expanderStackPanel.Children.Add(checkbox);
	}
}

// descobrir quem enviou o evento
public void checkbox_Checked(object sender, RoutedEventArgs e)
{
    // irá mostrar o conteúdo do CheckBox que enviou o evento
    MessageBox.Show(((CheckBox)sender).Content.ToString());
}

Um comentário sobre “Adicionar Evento Dinamicamente em Componente em C#

Deixe um comentário