Rumah > pembangunan bahagian belakang > C++ > Bolehkah Pengendali Acara Dipindahkan Antara Kawalan Menggunakan Refleksi?

Bolehkah Pengendali Acara Dipindahkan Antara Kawalan Menggunakan Refleksi?

Mary-Kate Olsen
Lepaskan: 2024-12-31 11:18:15
asal
163 orang telah melayarinya

Can Event Handlers Be Transferred Between Controls Using Reflection?

Bolehkah Pengendali Acara Dipindahkan Antara Kawalan?

Soalan:

Adakah boleh dibayangkan untuk "mencuri" pengendali acara dikaitkan dengan satu kawalan dan berikannya kepada lain?

Jawapan:

Ya, ada kemungkinan dengan kaveat: refleksi diperlukan. Ramai ahli yang berkaitan disembunyikan sebagai peribadi atau dalaman.

Pelaksanaan:

Buat projek Windows Forms baharu dan letakkan dua butang pada borangnya. Kemudian, gunakan kod berikut:

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");
    }
  }
}
Salin selepas log masuk

Nota: Ini menunjukkan cara Microsoft menyekat akses kepada kaedah kritikal atas sebab keselamatan.

Atas ialah kandungan terperinci Bolehkah Pengendali Acara Dipindahkan Antara Kawalan Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan