Appel de l'événement
Remonter à Création d'événements - Index
Dans vos composants, il se peut que vous deviez déclencher le même événement depuis différentes parties de votre code. Il est préférable de centraliser ces appels à un événement. Autrement dit, dans votre composant, créez une méthode virtuelle qui appelle le gestionnaire d'événement de l'application (si un gestionnaire a été affecté) et qui fournit une gestion par défaut.
Ces méthodes virtuelles sont appelées des répartiteurs d'événements ou des méthodes Do. En effet, la convention de nommage la plus courante consiste à nommer ces méthodes selon l'événement qu'elles déclenchent, en remplaçant le préfixe On
par un Do
. Par exemple, pour le répartiteur d'événement qui déclenche l'événement OnClick
, la convention de nommage est DoClick
.
Le fait de rassembler tous les appels à un événement en un seul endroit vous permet d'être sûr qu'un programmeur, qui dérive un nouveau composant à partir du vôtre, pourra personnaliser la gestion de l'événement en redéfinissant une méthode sans avoir à parcourir votre code pour repérer les endroits où l'événement est appelé.
Considérations à prendre en compte lors de l'appel de l'événement
Deux autres considérations sont à prendre en compte concernant l'appel de l'événement :
- Les gestionnaires vides doivent être valides
- Les utilisateurs peuvent redéfinir la gestion par défaut.
Exemple de répartiteur d'événement
Voici l'exemple le plus simple d'un répartiteur d'événement prenant en compte les considérations ci-dessus :
C++ :
virtual void __fastcall TComponentName::DoEventName(UnicodeString Parameter1, UnicodeString Parameter2)
{
if (FOnEventName)
FOnEventName(this, Parameter1, Parameter2);
}
Delphi :
procedure TComponentName.DoEventName(Parameter1, Parameter2: string);
begin
if Assigned(FOnEventName) then
FOnEventName(Self, Parameter1, Parameter2);
end;
L'utilisation d'un répartiteur d'événement vous permet de réduire les appels au gestionnaire d'événement à une seule ligne. Vous n'avez pas besoin de vérifier si la variable FOnEventName est assignée chaque fois ; vous appelez simplement le répartiteur d'événement et cette procédure se charge du contrôle de la variable.
Cette approche permet également aux développeurs de créer une sous-classe de votre composant, pour redéfinir facilement le déclenchement de l'événement.