У меня есть поле комбинированного списка в пользовательском элементе управления. Как я могу выставить определенные события от него, такие как SelectedIndexChanged или KeyPress, и т.д. кому-либо/вещи реализующему мой пользовательский элемент управления?
Вы можете переслать события следующим образом:
public event EventHandler SelectedIndexChanged
{
add { inner.SelectedIndexChanged += value; }
remove { inner.SelectedIndexChanged -= value; }
}
Вам нужно будет самостоятельно закодировать их в элементе управления - пользовательский элемент управления не продвигает автоматически события своих дочерних элементов управления. Затем вы можете связать свой фактический элемент управления с продвигаемым событием пользовательского элемента управления:
public event EventHandler SelectedIndexChanged;
private void OnSelectedIndexChanged(object sender, EventArgs e)
{
if (SelectedIndexChanged != null)
SelectedIndexChanged(sender, e);
}
public UserControl1()
{
InitializeComponent();
cb.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged);
}
К сожалению, вам придется делать это для каждого интересующего вас события.
Очень простым решением вместо использования настраиваемых событий было бы предоставление вложенного элемента управления как свойства настраиваемого элемента управления. Оттуда вы можете очень легко прикрепить к нему обработчики событий. Не всегда рекомендуется предоставлять дочерние элементы управления, но в зависимости от типа элемента управления и того, как вы его используете, это может сработать.
//create an instance of my control
MyCustomControl controlInstance = new MyCustomControl();
//attach and event handler to the exposed subcontrol
controlInstance.SaveButton.Click += new EventHandler(SaveButton_Click);