Le WIKI francophone consacré à Windows Phone et à Android ...

Pointui Home 2 - Évènements

RSS
Il peut être étonnant de voir des méthodes telle que Chargement() qui semblent fonctionner comme des évènements mais ce sont en fait des méthodes. Quelques explications sont nécessaires... Certaines classes, comme Screen ou Applet, possèdent des méthodes qui nécessitent toujours une implémentation pour être activées. Prenons l'exemple de la classe Applet. Une applet aura pratiquement toujours quelque chose à mettre à jour lorsqu'elle est activée donc si la classe Applet fournit une méthode Activated() elle sera invoquée par le moteur de script, Cela aurait pu être réalisé de la même façon avec un évènement de type OnActivated() mais cela signifierait alors que chaque applet que vous codez nécessiterait la création d'une méthode pour manipuler un évènement (avec un handle) et ensuite reprendre cet évènement pour l'exécuter ; cela fonctionnerait de la même manière et il n' y a rien de mauvais dans cette approche, excepté que nous avons pensé que pour rendre ceci plus simple (c'est de là que peux venir la confusion), nous laisserions le moteur de script appeler directement les méthodes pour la plupart des choses. C'est pourquoi il existe une méthode Screen.Load()qui est appelée (vous étiez peut être habitués à voir des évènements de type OnLoad dans d'autres langages). Si pour une raison ou une autre vous désirez créer un véritable évènement, rien ne vous en empêche. Voilà comment cela peut être réalisé pour la méthode Load()d'un écran :

class MonSuperbeEcran : Screen 
{ 
	Event OnLoad; 

	void Load() 
	{ 
		//Cette méthode Load() est abandonnée par le moteur de script une fois que le 
		//controle est initialisé 
 
		//trigger (déclencheur) d'évènement – qui permet de piloter le comportement
		//du handle de l'évènement 
		OnLoad(); 
	} 
} 

Pourquoi s'embêter avec ça ? Parce qu'un véritable évènement comme le OnLoad() décrit ci-dessus peut voir son handle changé à la volée et peut même avoir plusieurs handles qui lui sont assignés, alors que la méthode Load() sera seulement appelée directement par le moteur de script.

La plupart du temps vous aurez juste besoin de fournir une méthode d'implémentation.

  • Définir des évènements

Tous les évènements doivent être du type Event, et ne jamais inclure de définition complète comme une liste de paramètre. Fondamentalement, un évènement est défini et rend possible l'assignation d'un ou de plusieurs handles. Les évènements ne peuvent jamais retourner de valeurs.

  • Invoquer des évènements

Un évènement est simplement invoqué en l'appelant avec une syntaxe identique à celle utilisée pour appeler une méthode (voir exemple précédent). Aucun mot clé spécial n'est requis.

  • Paramètres d'un évènement

Les évènements peuvent inclure des paramètres, mais assurez-vous que vous avez toujours le bon nombre de paramètres dans la méthode qui le manipule ainsi que lors des appels de cet évènement. Voilà un exemple :

class Exemple 
{ 
	Event ActiverPause; 
 
	void Load() 
	{ 
		//initalisation du manipulateur (handler) 
		ActiverPause = ActiverPause_Handler; 
	} 
 
	void ActiverPause_Handler(int param1, int param2) 
	{ 
	} 
 
	void Pause() 
	{ 
		//appel de l'évènement ActiverPause avec certains paramètres 
		ActiverPause(1234, 5678); 
	} 
} 


  • Manipulateurs (handlers) multiples

Nous avons construit un moteur permettant d'assigner des manipulateurs multiples à un seul évènement, principalement parce que cela semble être une chose intéressante à faire. Nous ne l'avons pas encore utilisé, peut être en aurez vous besoin.

Voilà un exemple (remarquez au passage l'utilisation de l'opérateur "+=") :

class Exemple 
{ 
	Event TelechargementTermine; 
 
	void Demarrer() 
	{ 
		//initialisation de deux manipulateurs (handlers) pour l'évènement 
		//Les deux manipulateurs Handler1() and Handler2() seront appelés lorsque 
		//l'évènement est déclenché 
		TelechargementTermine += Handler1; 
		TelechargementTermine += Handler2;   
	} 
 
	void Arreter() 
	{ 
		//suppresion des manipulateurs (handlers) 
		TelechargementTermine -= Handler1; 
		TelechargementTermine -= Handler2; 
	} 
 
	void Handler1() 
	{   
	} 
 
	void Handler2() 
	{ 
	} 
} 

L'usage de l'opérateur “=” effacera tous les handlers préalablement créés et les remplacera par un simple handler qui sera assigné.

Il n'est pas possible pour le moment d'effacer des handlers multiples autrement qu'en utilisant l'opérateur "=", ou individuellement avec l'opérateur “-=”.

Copyright 2012 CordoWEB