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
722 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!

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