Отправитель события из пользовательского элемента управления - PullRequest
3 голосов
/ 04 ноября 2010

У меня есть элемент управления, который расширяет UserControl.Этот элемент управления содержит два элемента управления ComboBox.Я создал обработчик событий, который срабатывает при изменении любой из комбо:


public event EventHandler ComboChanged
{
add { cmbA.SelectedIndexChanged += value; cmbB.SelectedIndexChanged += value; }
remove {...}
}

Когда я добавляю обработчик событий к этому событию, есть ли способ сообщить sender как пользовательскийэлемент управления (т.е. родительский элемент управления ComboBox), а не сам ComboBox?Или я пытаюсь сделать что-то, чего не должен делать здесь?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010

Ответ Йоанна - путь.Вот похожая схема, но с некоторыми незначительными отличиями.

// Default listener makes null-check unnecessary when raising event.
// Note that no custom implementations are provided for add, remove.
public event EventHandler ComboChanged = delegate { };

...

foreach(var comboxBox in new[] {cmbA, cmbA})
{
  // Attach listener to combo-box's event that raises our own event.
  // Lambda-expression is ok since we don't intend to ever unsubscribe.
  comboBox.SelectedIndexChanged += (sender, args) => ComboChanged(this, args);
}
3 голосов
/ 04 ноября 2010

У вас должно быть что-то вроде этого:

public event EventHandler MyControlChanged

, а затем в вашем пользовательском элементе управления две функции для каждого из ComboBox

protected void oncmbA_SelectedIndexChanged(object sender, EventArgs e)
{
   if (MyControlChanged!=null)
     MyControlChanged(this, e);//or some new Eventagrs that you wish to communicate
}

protected void oncmbB_SelectedIndexChanged(object sender, EventArgs e)
{
   if (MyControlChanged!=null)
     MyControlChanged(this, e);//or some new Eventagrs that you wish to communicate
}

это будет относиться к UserControl, а не кполе со списком, которое запустило событие вашего UserControl.

...