


Bolehkah Pengendali Acara Ditugaskan Semula Secara Dinamik dalam C#?
Menetapkan Pengendali Acara Secara Dinamik: Adakah Mungkin?
Dalam pembangunan perisian, pengendali acara adalah penting untuk mewujudkan interaksi dipacu peristiwa antara elemen UI dan kod asas. Walau bagaimanapun, persoalan biasa timbul: Adakah mungkin untuk "mencuri" pengendali acara yang diberikan kepada satu kawalan dan menyerahkannya kepada kawalan yang lain?
Sekatan Pengkompil
Apabila menetapkan pengendali acara menggunakan operator =, pengkompil mengehadkan tugasan pengendali acara yang telah ditetapkan. Percubaan untuk menggunakan semula pengendali acara yang diberikan kepada btn1 untuk btn2 akan mengakibatkan ralat pengkompil.
Refleksi: Laluan Penyelesaian
Walaupun terdapat sekatan pengkompil, ia sememangnya mungkin untuk memindahkan pengendali acara pada masa jalan menggunakan refleksi. Pendekatan ini memerlukan akses terus kepada ahli peribadi dan dalaman kelas kawalan.
Sampel Kod
Pertimbangkan coretan 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"); } } }
Dalam kod ini, kunci acara dalaman rahsia diambil dan digunakan untuk mengakses senarai pengendali acara btn1. Pengendali acara kemudian dialih keluar daripada btn1 dan ditambahkan pada btn2.
Kerumitan dan Had
Walaupun refleksi menyediakan cara untuk memindahkan pengendali acara, adalah penting untuk ambil perhatian bahawa pendekatan ini adalah kompleks dan harus digunakan dengan berhati-hati. Ia melibatkan mengakses butiran pelaksanaan dalaman bagi kelas kawalan, yang mungkin berubah merentas versi rangka kerja yang berbeza.
Atas ialah kandungan terperinci Bolehkah Pengendali Acara Ditugaskan Semula Secara Dinamik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apakah jenis nilai yang dikembalikan oleh fungsi bahasa C? Apa yang menentukan nilai pulangan?

Gulc: Perpustakaan C dibina dari awal

Langkah Format Fungsi Fungsi C Langkah Penukaran Kes

Apakah definisi dan peraturan panggilan fungsi bahasa C dan apakah itu

Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan?

Penggunaan dan perkongsian frasa yang berbeza

Bagaimanakah saya menggunakan algoritma dari STL (jenis, mencari, mengubah, dll) dengan cekap?

Bagaimana Perpustakaan Templat St Standard (STL) berfungsi?
