15. Gestion des événements
La gestion des événements dans le Framework .NET 4.6 et dans Visual Studio 2017 est restée pratiquement inchangée par rapport aux versions précédentes.
Nous continuons à travailler avec le Windows Form de la dernière leçon, en déclarant que ce que nous dirons plus tard des événements s’applique à tout type de contrôle, que ce soit un formulaire, un bouton, une zone de texte, une commande de menu, etc.
Nous pouvons définir un événement comme l’occurrence d’une condition : de la pression d’un bouton à la saisie dans une zone de texte. Lorsque l’une de ces conditions se produit, nous disons que le contrôle génère (ou lance) un événement. Par exemple, lorsqu’on appuie sur le bouton gauche de la souris sur un bouton, on génère l’événement « Click ».
Chaque événement peut être associé à une action décrite par une routine particulière qui est exécutée chaque fois que l’événement se produit.
Supposons que nous souhaitions effectuer une certaine action lors du chargement du formulaire. Tout d’abord, nous devons créer un gestionnaire d’événements (appelé Event Handler) pour l’événement « Load » de la fenêtre Form1. Nous ajoutons le code suivant dans le constructeur de la classe :
this.Load += new EventHandler(Form1_Load);
Pour installer un gestionnaire d’événements, nous devons spécifier le nom de l’objet qui expose l’événement : dans ce cas nous avons utilisé this, qui, comme nous l’avons déjà mentionné, représente la classe en cours (dans ce cas le formulaire).
Ci-dessous, après le point, le nom de l’événement à gérer est indiqué : les événements disponibles sont reconnaissables, dans la liste visualisée par l’IntelliSense, par le symbole d’un éclair.
L’opérateur ‘+=’ indique qu’un gestionnaire est ajouté pour l’événement. Vous utilisez ‘+=’, et pas seulement ‘=’, car vous pouvez spécifier plusieurs gestionnaires pour le même événement.
L’IntelliSense nous aide à nouveau, en proposant un nom pour le gestionnaire d’événements : il suffit d’appuyer sur la touche TAB pour confirmer la suggestion.
La méthode qui représente l’action liée à l’événement s’appelle un « délégué« . En fait, la gestion de l’événement est déléguée à cette méthode. Form1_Load() dans ce cas est un délégué.
Cette méthode de création de gestionnaires d’événements correspond à « AddHandler » dans VB.NET
EventHandler et toutes les classes dérivées sont des gestionnaires d’événements. Chaque objet d’instance EventHanlder requiert une référence de délégué pour gérer un événement, la chaîne « Form1_Load » sans parenthèses n’est rien d’autre qu’une référence (pointeur) à la méthode Form1_Load().
Un délégué dans l’abstrait, cependant, a une certaine signature et pour le remplacer par une autre méthode comme Form_Load () cela doit avoir les mêmes arguments en type et nombre et le même type de retour.
Avec EventHandler (Form1_Load), il est exprimé que la méthode Form1_Load() aura des arguments égaux en nombre et type à ceux indiqués dans la déclaration du délégué EventHandler et aura le même type de délégué que le type de retour.
Une autre pression sur la touche TAB ajoute automatiquement, dans la classe, la méthode qui sera appelée lorsque l’événement en question est généré :
public void Form1_Load(object sender, EventArgs e) { Console.WriteLine("Méthode implémentée."); }
L’instruction « Console.WriteLine() » nous montre un message dans le débogueur.
Les arguments de cette méthode sont deux :
- Object sender représente l’objet (contrôle, classe) qui a généré l’événement et est utile dans le cas où la même routine est exécutée en réponse à des événements lancés par différents objets, pour savoir qui l’a réellement généré ;
- EventAgrs e. EventArgs, ainsi que toutes les classes dérivées, contient les rubriques associées à l’événement. Dans notre cas, «e» est de type EventArgs, mais peut être spécialisé en fonction de l’événement.
Par exemple, dans le cas d’événements de gestion de souris (MouseClick, MouseMove, etc.), il est de type «MouseEventArgs» et permet de connaître la position du curseur ou le bouton de la souris pressé.
Essayons d’utiliser la routine Form1_Load. Nous voulons nous assurer qu’au début du programme, un MessageBox est affiché avec les mots « Hello World! ». Pour ce faire, définissez simplement la méthode Form1_Load comme suit :
void Form1_Load(object sender, EventArgs e) { MessageBox.Show( “Hello World!”, “Évènement”, MessageBoxButtons.OK, MessageBoxIcon.Information); }
MessageBox est une classe qui contient une méthode statique, Show() qui affiche une boîte de message. Il a plusieurs définitions par surcharge (21 pour être précis) ; la version la plus utilisée, également chez nous, prend comme argument le message à afficher, le titre du MessageBox, les boutons et l’icône de la fenêtre.
Maintenant lancez l’application en cliquant sur le bouton . Lecture de la barre d’outils (ou en appuyant sur la touche F5). Si aucune erreur n’a été faite, la fenêtre montrée dans la figure devrait apparaître après la compilation.
Les gestionnaires d’événements peuvent également être créés d’une autre manière. Dans le concepteur, sélectionnez le contrôle pour lequel vous souhaitez définir le gestionnaire, puis déplaçons-nous dans la fenêtre Propriétés et cliquons sur l’icône éclair.
Une liste apparaîtra contenant tous les événements générés par le contrôle en question. En en sélectionnant un, en bas de la fenêtre un court message s’affichera en indiquant quand cet événement est lancé.
Cliquons sur un événement, tapons le nom d’une routine dans la zone de texte correspondante et appuyons sur la touche ENTRÉE, Visual Studio ajoutera automatiquement le code pour installer le gestionnaire d’événements (dans le fichier Designer) et insèrera dans le fichier de formulaire un routine avec le nom.
Sinon, en double-cliquant sur le nom de l’événement, un gestionnaire d’événements et une routine de gestion seront créés avec le nom par défaut (format du nom du contrôle, caractère de soulignement et nom de l’événement).
Pour supprimer un gestionnaire d’événement créé de cette manière, cliquez avec le bouton droit sur l’événement et sélectionnez la commande Réinitialiser. Enfin, pour revenir à l’affichage des propriétés de contrôle, appuyez sur le bouton Propriétés situé à gauche de l’icône de l’éclair.
De nouveau, en double-cliquant sur un objet, Visual Studio définira automatiquement un gestionnaire d’événements pour l’événement par défaut de l’objet en question (Load pour les formulaires, Click pour les boutons, TextChanged pour le texte etc.).
Ce rapide aperçu du formulaire Windows est destiné à fournir les connaissances de base qui vous permettent d’approfondir le sujet sans trop d’effort. Pour une discussion plus détaillée, référez-vous aux références de VB.NET : bien que le langage soit différente, les concepts montrés sont également valides pour le C#.
Étiquette :Concepts avancés, Event Handler, IntelliSense, Visual Studio