ใน C# ฉันกำลังสร้างการควบคุมแบบกำหนดเองเพื่อใช้ในแอปพลิเคชันแบบกำหนดเอง ฉันต้องการให้การควบคุมแต่ละรายการดำเนินเหตุการณ์ที่จะเริ่มทำงานหากมีข้อยกเว้นหรือข้อผิดพลาด (ความล้มเหลวในการตรวจสอบภายใน) เกิดขึ้นภายในการควบคุม ฉันสร้างอินเทอร์เฟซที่ประกาศเหตุการณ์ ฉันสร้างการควบคุมผู้ใช้ที่ใช้อินเทอร์เฟซ นี่คือปัญหาของฉัน
เมื่อฉันเพิ่มตัวควบคุมแบบกำหนดเองตัวใดตัวหนึ่งลงในแบบฟอร์ม ฉันต้องการวนซ้ำตัวควบคุมบนแบบฟอร์ม ตรวจหาตัวควบคุมทั้งหมดที่เป็นตัวควบคุมแบบกำหนดเองของฉัน จากนั้นกำหนดตัวจัดการเหตุการณ์ให้กับเหตุการณ์ที่ฉันประกาศในอินเทอร์เฟซ ฉันไม่สามารถหาวิธีแปลงวัตถุให้เป็นประเภทของอินเทอร์เฟซได้
พิจารณา:
interface IMyInterface
{
event ControlExceptionOccured ControlExceptionOccuredEvent;
...
}
public partial class TextControl : UserControl, IMyInterface {
...
public event ControlExceptionOccured ControlExceptionOccuredEvent;
...
}
และในแบบฟอร์มของฉัน ฉันใช้ TextControls อันใดอันหนึ่งเหล่านี้ ฉันมีวิธีนี้:
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;
}
}
}
สิ่งนี้สอดคล้องแต่จะไม่ดำเนินการ ฉันจะเพิ่ม ControlExceptionHandler ให้กับห่วงโซ่เหตุการณ์ได้อย่างไร
ฉันขอขอบคุณทุกคนที่พยายามช่วย
if (Control is IMyInterface)
แทนที่จะโทรGetType
ฯลฯ - person Jon Skeet   schedule 06.07.2011