2010-11-04 5 views
3

J'ai un contrôle qui s'étend UserControl. Ce contrôle contient deux contrôles ComboBox. J'ai créé un gestionnaire d'événements qui se déclenche lorsque l'un des combos change:Expéditeur d'événement à partir du contrôle personnalisé

 

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

Lorsque j'ajoute un gestionnaire d'événements à cet événement, est-il possible pour le sender à signaler que le contrôle personnalisé (la Contrôle parent de ComboBox) plutôt que le ComboBox lui-même? Ou est-ce que j'essaie de faire quelque chose que je ne devrais pas faire ici?

Répondre

3

Vous devriez avoir quelque chose comme ceci:

public event EventHandler MyControlChanged 

puis dans votre UserControl deux fonctions pour chacun des 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 
} 

ce serait alors se référer à la UserControl et non à la ComboBox a déclenché l'événement de votre UserControl.

+0

Excellent, merci. –

3

La réponse de Yoann est la voie à suivre. Voici un modèle similaire, mais avec quelques différences mineures.

// 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

Yours est plus élégant cependant;) – Arthis

+0

Merci, toujours utile d'avoir une alternative. –

Questions connexes