2010-11-04 4 views
3

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

 

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

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

ответ

3

Вы должны иметь что-то вроде этого:

public event EventHandler MyControlChanged 

, а затем в вашем UserControl две функции для каждого из 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.

+0

Отлично, спасибо. –

3

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

// 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); 
} 
+0

Ваш более элегантный, но;) – Arthis

+0

Спасибо, всегда полезно иметь альтернативу. –