2017-09-20 1 views
0

En ce qui concerne ma question plus WPF How to assign the same event lambda expression to two different elementsComment s'abonner à deux événements différents en utilisant le même gestionnaire d'événements créé avec une expression lambda?

J'ai maintenant besoin un peu différent. Je dois souscrire à différents types d'événements en utilisant la même action lambda:

EventHandler action = (sender2,args) => 
{ 
    var cmbChanged = sender2 as ComboBox; 
    //...check... 
}; 


cmb.DropDownClosed += action; 
cmb.PreviewKeyUp += action; // <----- compiler error here 

mais le compilateur dit à juste titre qu'une action est System.EventHandler alors qu'ici je besoin System.Window.Input.KeyEventHandler.

En bref, je dois vérifier certaines conditions à la fois lorsque vous cliquez avec la souris et fermez le combo et lorsque vous choisissez une valeur en tapant.

+0

Vous pouvez simplement déplacer le code qui se trouve dans l'expression lambda vers une méthode séparée et appeler cette méthode dans chaque gestionnaire d'événements – Alex

Répondre

2

Étant donné que les types de délégué sont différents, vous ne pouvez pas affecter l'ajouter directement. Mais vous pouvez le transférer simplement avec:

cmb.DropDownClosed += action; 
cmb.PreviewKeyUp += (sender, e) => action(sender, e); 

Depuis e est de type KeyEventArgs qui est dérivé de EventArgs vous pouvez passer à action.

+0

Merci beaucoup !! Rapide, propre, facile et fonctionne merveille !! – Luca

+0

"Affecter" n'est techniquement pas correct à 100% ici, nous parlons d'abonnement à un événement. Bien qu'il s'agisse d'un opérateur «d'affectation d'addition» en soi, sa signification pour les événements est légèrement différente par rapport à une simple affectation. – dymanoid