C# / Récupérer l’élément déclencheur d’un événement

Il arrive d’avoir besoin de connaître l’élément (tel un bouton ou une image) qui a déclenché un événement (clic, passage de la souris, appui sur une touche)…

Exemple de cas de nécessité:

Imaginons un morpion composé de 3×3 images où chaque image représente une case. Va-t-on réellement devoir créer 9 fonctions différentes Image1_Click, Image2_Click, Image3_Click… correspondante au clic de chaque image ? Imaginons devoir gérer une grille de Puissance 4…

La solution:

Il est tout à fait possible d’associer le même événement à plusieurs contrôles. Nous allons en générer une portant le nom de Image_Click() à l’aide de Visual Studio. Une fois la fonction créée, il suffit de la rattacher aux autres éléments.

void Image_Click(object sender, EventArgs e)<br />
{<br />
     // Tout ce qui se passe une fois le clic effectué<br />
}

Observez bien les paramètres de cette fonction générée. Elle comporte un paramètre appelé sender. Tout comme son nom l’indique, ce paramètre représente l’objet qui a déclenché l’événement (que ce soit un bouton, un slider ou autre).

Mais si vous essayez, on ne peut pas utiliser sender directement. Pour cela, il faut le caster implicitement.

Button bouton = sender as Button;

De là, on va enfin pouvoir agir sur le bouton qui déclenché l’événement.

string nom = bouton.Name<br />
bouton.Content = &quot;Cliquez moi !&quot;;

Et si je veux déclencher la même fonction pour un bouton ou une image ?

Pas de problèmes, il suffit de tester le type du sender. Pour celà, rien de plus simple.

void Image_Click(object sender, EventArgs e)<br />
{<br />
   if(sender is Image)<br />
   {<br />
      Image image = sender as Image;<br />
   }<br />
   else if(sender is Button)<br />
   {<br />
      Button bouton = sender as Button;<br />
   }<br />
}

Articles similaires:

Lien Permanent pour cet article : https://www.jbvigneron.fr/2011/10/25/csharp-evenement-declencheur-event/

(1 commentaire)

  1. Intéressant ce petit tuto !!!

Laisser un commentaire

Your email address will not be published.

css.php