2011-08-10 2 views
1

J'ai une fonction qui désélectionne tous les éléments sélectionnés dans la liste lorsque l'utilisateur clique avec le bouton droit de la souris sur la liste. Y a-t-il un moyen d'appliquer cette fonction à toutes les listboxes de mon projet?Evénement global C# accessible à partir de plusieurs formulaires

Je veux savoir s'il y a une autre façon, ne pas faire une classe et de mettre la fonction dans la etc classe:

public class selectedListbox{ 
    private void setSelected(ListBox details){ 
    details.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listBoxDeselectAll); 
    } 

    private void listBoxDeselectAll(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Right) 
      { 
       ((ListBox)sender).ClearSelected(); 
      } 
     } 

} 

puis pour chaque zone de liste pour ce faire:

selectedListBox h = new selectedListBox(); 
h.setSelected(listboxNameHere); 
+2

Vous trouverez peut-être utile pour créer un nouveau contrôle qui hérite de 'ListBox' et possède cette fonctionnalité. – Amy

+0

Je pense que vous pouvez utiliser la collection form.controls, mais je n'ai pas assez d'expérience pour vous donner une réponse complète. check msdn – NirMH

+0

@ Inuyasha Voulez-vous me donner plus de détails pour créer un nouveau contrôle? Merci –

Répondre

2

peut-être avec une extension + lambda?

public static class ListBoxSelectExtension 
{ 
    public static void SetSelected(this ListBox Me) 
    { 
     Me.MouseDown += 
      (sender, e) => 
      { 
       if (e.Button == MouseButtons.Right) 
        ((ListBox)sender).ClearSelected(); 
      }; 
    } 
} 

cette façon, vous pouvez faire ce qui suit sans avoir à instancier une nouvelle classe ou d'avoir à avoir tous vos listboxes être une classe dérivée:

MyListBox1.SetSelected(); 
MyListBox2.SetSelected(); 

etc.

+0

vous pouvez également utiliser '@ this' comme nom de variable, IMO il se sent plus naturel (comme une méthode normale) – Sebastian

1

Le méthode la plus simple serait de créer une classe qui hérite de ListBox:

public class CustomListBox : ListBox 
{ 
    public void SetSelected() 
    { 
     this.MouseDown += new MouseEventHandler(this.DeselectAll); 
    } 

    public void UnsetSelected() 
    { 
     this.MouseDown -= new MouseEventHandler(this.DeselectAll); 
    } 

    private void DeselectAll(object sender, MouseEventArgs e) 
    { 
     // ... 
    } 
} 

Vous utiliseriez votre cust om zone de liste de la même manière que vous utiliseriez une zone de liste standard.

1
public class MyListBox : ListBox 
    { 
     public sListBox() : base() 
     { 
      MouseDown += new System.Windows.Forms.MouseEventHandler(this.MouseDownFired); 
     } 

     private void MouseDownFired(object sender, MouseEventArgs args) 
     { 
      if (args.Button == MouseButtons.Right) 
      { 
      SelectedItems.Clear(); 
      } 
     } 
Questions connexes