Di C#, saya membuat kontrol khusus untuk digunakan dalam aplikasi khusus. Saya ingin setiap kontrol menerapkan peristiwa yang akan diaktifkan jika pengecualian atau kesalahan (kegagalan pemeriksaan internal) terjadi di dalam kontrol. Saya membuat antarmuka yang mendeklarasikan acara tersebut. Saya membuat kontrol pengguna yang mengimplementasikan antarmuka. Inilah masalah saya.
Ketika saya menambahkan salah satu kontrol khusus saya ke formulir, saya ingin mengulang kontrol pada formulir, mendeteksi semua kontrol yang merupakan kontrol khusus saya dan kemudian menetapkan pengendali acara ke acara yang saya nyatakan di antarmuka. Saya tidak dapat menemukan cara untuk melemparkan objek ke tipe antarmuka.
Mempertimbangkan:
interface IMyInterface
{
event ControlExceptionOccured ControlExceptionOccuredEvent;
...
}
public partial class TextControl : UserControl, IMyInterface {
...
public event ControlExceptionOccured ControlExceptionOccuredEvent;
...
}
dan di formulir saya, saya menggunakan salah satu TextControls ini. Saya punya metode ini:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control Control in Controls)
{
if (Control.GetType().GetInterface(typeof(IMyInterface).FullName) != null)
{
((IMyInterface)Control).ControlExceptionOccuredEvent += ControlExceptionHandler;
}
}
}
Ini mematuhi tetapi tidak akan dijalankan. Bagaimana cara menambahkan ControlExceptionHandler ke rantai acara?
Terima kasih saya kepada siapa pun yang mencoba membantu.
if (Control is IMyInterface)
daripada meneleponGetType
dll? - person Jon Skeet   schedule 06.07.2011