Heim > Backend-Entwicklung > C++ > Können Ereignishandler mithilfe von Reflection zwischen Steuerelementen übertragen werden?

Können Ereignishandler mithilfe von Reflection zwischen Steuerelementen übertragen werden?

Mary-Kate Olsen
Freigeben: 2024-12-31 11:18:15
Original
163 Leute haben es durchsucht

Can Event Handlers Be Transferred Between Controls Using Reflection?

Können Event-Handler zwischen Steuerelementen übertragen werden?

Frage:

Ist es denkbar, einen Event-Handler zu „stehlen“. Sie können es mit einem Steuerelement verknüpfen und ihm zuweisen ein anderer?

Antwort:

Ja, es ist möglich mit einer Einschränkung: Reflexion ist notwendig. Viele relevante Mitglieder werden als privat oder intern verborgen.

Implementierung:

Erstellen Sie ein neues Windows Forms-Projekt und platzieren Sie zwei Schaltflächen in seinem Formular. Verwenden Sie dann den folgenden Code:

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Reflection;

namespace WindowsFormsApplication1 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      button1.Click += new EventHandler(button1_Click);

      // Get secret click event key
      FieldInfo eventClick = typeof(Control).GetField("EventClick", BindingFlags.NonPublic | BindingFlags.Static);
      object secret = eventClick.GetValue(null);

      // Retrieve the click event
      PropertyInfo eventsProp = typeof(Component).GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
      EventHandlerList events = (EventHandlerList)eventsProp.GetValue(button1, null);
      Delegate click = events[secret];

      // Remove it from button1, add it to button2
      events.RemoveHandler(secret, click);
      events = (EventHandlerList)eventsProp.GetValue(button2, null);
      events.AddHandler(secret, click);
    }

    void button1_Click(object sender, EventArgs e) {
      MessageBox.Show("Yada");
    }
  }
}
Nach dem Login kopieren

Hinweis: Dies zeigt, wie Microsoft aus Sicherheitsgründen den Zugriff auf kritische Methoden einschränkt.

Das obige ist der detaillierte Inhalt vonKönnen Ereignishandler mithilfe von Reflection zwischen Steuerelementen übertragen werden?. 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