У меня есть combobox в пользовательском элементе управления. Как я могу выставлять из него определенные события, такие как SelectedIndexChanged или KeyPress, и т.д. Кому-либо, реализующим мой пользовательский элемент управления?
Выявление событий основного контроля
Ответ 1
Вы можете пересылать события следующим образом:
public event EventHandler SelectedIndexChanged
{
add { inner.SelectedIndexChanged += value; }
remove { inner.SelectedIndexChanged -= value; }
}
Ответ 2
Вам нужно будет самостоятельно закодировать их в элементе управления - пользовательский элемент управления автоматически не активирует события дочерних элементов управления. Затем вы можете перекрещивать свой фактический элемент управления с событием, поддерживаемым пользовательским управлением:
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);
}
К сожалению, вам нужно будет сделать это для каждого интересующего вас события.
Ответ 3
Очень простое решение, а не создание пользовательских событий, заключается в том, чтобы выставить вложенный элемент управления как свойство настраиваемого элемента управления. Оттуда вы можете легко подключить обработчики событий. Не всегда рекомендуется размещать дочерние элементы управления, но в зависимости от типа управления и того, как вы его используете, он может работать.
//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);
Ответ 4
Есть другой способ справиться с этим через конструктор:
В дизайнере, в вашем пользовательском элементе управления, в свойстве combobox в разделе "Дизайн" установите "Модификаторы" на внутренний.
Затем, где вам нужно что-то сделать, добавьте:
CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged;
вместе с:
private void YourCombo_SelectedIndexChanged(object sender, EventArgs e)
{
// Code to execute when the SelectedIndexIsChanged goes here
}