Est-ce que les méthodes de réglage à un événement remis à zéro l'ancienne méthode ou ajoute une autre méthode dans sa liste d'événements?
-
25-10-2019 - |
Question
Je suis peu confus sur la configuration des événements dans .NET.
J'ai méthodes défini pour être MouseDown comme suit.
if theTool = TMakerTool.tmtSelect then
begin
MouseDown += new System.Windows.Forms.MouseEventHandler(@SelectMouseDown);
Cursor := Cursors.Arrow;
end
else
begin
MouseDown += new System.Windows.Forms.MouseEventHandler(@Maker_MouseDown);
Cursor := Cursors.Cross;
end;
code ci-dessus est appelé chaque fois qu'un mouseup est tiré. Parce que le code couchait événement MouseDown à une méthode, il va réinitialiser l'ancienne méthode qui a déjà été mis ou le garder et juste une autre méthode d'événement dans sa liste d'événements ...
La solution
peut réponse « ça dépend », cependant, si les événements sont conçus selon les directives .NET, l'ajout d'un événement comme vous le faites, des moyens d'ajouter à la liste des gestionnaires d'événements et < em> pas supprimer les anciens gestionnaires. Cela est certainement vrai pour les événements propres de tous .NET et devrait être vrai pour à peu près tout autre événement bien conçu.
Si vous voulez supprimer un événement de la liste, utilisez l'opérateur -=
.
Si vous définissez vous-même un événement, vous pouvez modifier ce comportement en remplaçant la add
-accesseur ou remove
-accesseur. Dans ce cas, vous êtes responsable de bon stockage des gestionnaires d'événements. Cependant, cela est rarement nécessaire de le faire à la main.