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"); } } }
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!