2009-07-25 3 views
1

J'ai une application avec beaucoup de contrôles ListBox. Je me demandais s'il serait possible d'ajouter le eventhandler pour le onselectedindexchanged dans le constructeur de la Listbox? Toutes les listboxes utiliseront la même méthode pour cela. Je sais que je peux les ajouter manuellement mais j'espérais une solution qui changerait toutes celles que j'ai actuellement pour utiliser le même eventhandler et quand j'en ajouterais une nouvelle pour ne pas avoir à lier la méthode.Créer un Eventhandler via la classe

Répondre

1

Vous pouvez simplement parcourir les contrôles? Par exemple (dans vos Form 's/Control' s ctor, après initiaize):

CascadeListBoxEvent(this, MyHandlerMethod) 

en utilisant la méthode utilitaire:

static void CascadeListBoxEvent(Control parent, EventHandler handler) 
{ 
    Queue<Control> queue = new Queue<Control>(); 
    queue.Enqueue(parent); 
    while (queue.Count > 0) 
    { 
     Control c = queue.Dequeue(); 
     ListBox lb = c as ListBox; 
     if (lb != null) 
     { 
      lb.SelectedIndexChanged += handler; 
     } 
     foreach (Control child in c.Controls) 
     { 
      queue.Enqueue(child); 
     } 
    } 
} 
+0

+1 pour fournir une meilleure solution que ce qui a été demandé. –