В 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