Maison > développement back-end > C++ > Comment puis-je transférer un gestionnaire d'événements entre des contrôles en C# ?

Comment puis-je transférer un gestionnaire d'événements entre des contrôles en C# ?

Linda Hamilton
Libérer: 2025-01-02 14:51:38
original
678 Les gens l'ont consulté

How Can I Transfer an Event Handler Between Controls in C#?

Pouvez-vous sournoisement « voler » les gestionnaires d'événements ?

Dans un dilemme de codage, vous cherchez à transférer un gestionnaire d'événements d'un contrôle à un autre . Pourtant, le compilateur constitue une barrière inflexible.

L'énigme du code :

Button btn1 = new Button();
btn1.Click += new EventHandler(btn1_Click);
Button btn2 = new Button();
// Assign btn1's event to btn2 (but met with rejection from compiler)
btn2.Click += btn1.Click; // Compiler denies
Copier après la connexion

Techniques de vol possibles :

  • Transfert direct : Hélas, cette approche apparemment simple déclenche un réplique du compilateur sévère.
  • Réplication du gestionnaire : Copier le gestionnaire d'événements et l'attribuer à plusieurs contrôles est faisable. Cependant, ce n'est pas la solution recherchée dans ce cas.

L'astuce basée sur la réflexion :

Si la force brute n'est pas votre style, alors revêtir le manteau de la réflexion peut dévoiler un chemin secret.

using System.Reflection;

// Declare event key
FieldInfo eventClick = typeof(Control).GetField("EventClick", BindingFlags.NonPublic | BindingFlags.Static);

// Retrieve click event
PropertyInfo eventsProp = typeof(Component).GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);

EventHandlerList events1 = (EventHandlerList)eventsProp.GetValue(btn1, null);
Delegate click = events1[eventClick.GetValue(null)];

// Remove from btn1, assign to btn2
events1.RemoveHandler(eventClick.GetValue(null), click);
EventHandlerList events2 = (EventHandlerList)eventsProp.GetValue(btn2, null);
events2.AddHandler(eventClick.GetValue(null), click);
Copier après la connexion

Attention, Microsoft a érigé de formidables barrières pour empêcher de tels manœuvres. Mais pour ceux qui osent, cette technique de réflexion donne accès aux royaumes cachés de la gestion des événements !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal