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()); }
Muito esclarecedor, ajudou bastante.