Heim > Backend-Entwicklung > C++ > Wie kann ich einen Event-Handler zwischen Steuerelementen in C# übertragen?

Wie kann ich einen Event-Handler zwischen Steuerelementen in C# übertragen?

Linda Hamilton
Freigeben: 2025-01-02 14:51:38
Original
678 Leute haben es durchsucht

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

Können Sie Event-Handler schlau „stehlen“?

In einem Codierungsproblem versuchen Sie, einen Event-Handler von einem Steuerelement auf ein anderes zu übertragen . Dennoch stellt der Compiler eine unnachgiebige Barriere dar.

Das Code-Rätsel:

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
Nach dem Login kopieren

Mögliche Diebstahltechniken:

  • Direkter Transfer: Leider löst dieser scheinbar unkomplizierte Ansatz ein Heck aus Compiler-Erwiderung.
  • Handler-Replikation: Das Kopieren des Ereignishandlers und die Zuweisung desselben zu mehreren Steuerelementen ist möglich. Allerdings ist es in diesem Fall nicht die gesuchte Lösung.

Der reflexionsbasierte Trick:

Wenn rohe Gewalt nicht Ihr Stil ist, dann Das Anziehen des Mantels der Reflexion kann einen verborgenen Weg offenbaren.

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);
Nach dem Login kopieren

Vorsicht, Microsoft hat gewaltige Hindernisse errichtet solche Manöver verhindern. Aber für diejenigen, die es wagen, gewährt diese Reflexionstechnik Zugang zu verborgenen Bereichen der Ereignisverarbeitung!

Das obige ist der detaillierte Inhalt vonWie kann ich einen Event-Handler zwischen Steuerelementen in C# übertragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage