Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memindahkan Pengendali Acara Antara Kawalan dalam C#?

Bagaimanakah Saya Boleh Memindahkan Pengendali Acara Antara Kawalan dalam C#?

Linda Hamilton
Lepaskan: 2025-01-02 14:51:38
asal
722 orang telah melayarinya

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

Bolehkah Anda Diam-diam "Mencuri" Pengendali Acara?

Dalam kebingungan pengekodan, anda berusaha untuk memindahkan pengendali acara dari satu kawalan ke kawalan yang lain . Namun, pengkompil berdiri sebagai penghalang yang tidak mudah menyerah.

Teka-teki Kod:

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
Salin selepas log masuk

Kemungkinan Teknik Kecurian:

  • Pemindahan Terus: Malangnya, ini pendekatan yang kelihatan mudah mencetuskan balas pengkompil yang tegas.
  • Replikasi Pengendali: Menyalin pengendali acara dan memberikannya kepada berbilang kawalan boleh dilakukan. Walau bagaimanapun, ia bukanlah penyelesaian yang dicari dalam kes ini.

Helah Berasaskan Refleksi:

Jika kekerasan bukan gaya anda, maka memakai jubah renungan mungkin mendedahkan laluan terselindung.

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

Berhati-hati, Microsoft telah membina yang menggerunkan halangan untuk menghalang gerakan tersebut. Tetapi bagi mereka yang berani, teknik menggunakan refleksi ini memberikan akses kepada alam tersembunyi pengendalian acara!

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memindahkan Pengendali Acara Antara Kawalan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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