2010-08-23 2 views
3

Eh bien, j'ai une liste avec quelques éléments à l'intérieur.
Je veux détecter un double clic sur un élément.
Actuellement, la méthode que j'utilise présente un problème: si un utilisateur clique deux fois sur un emplacement vide, l'élément actuellement sélectionné est signalé par un double clic.Je veux détecter un double-clic d'objet dans un contrôle WinCode Listbox. [comment gérer cliquer sur la zone vide?]

Mise à jour:
S'il vous plaît noter que cette question n'est pas aussi facile qu'il n'y paraît au premier abord.
Notez également que la réponse de Timwi n'est pas correcte parce que la partie [if (ListBox1.SelectedIndex == -1)] ne sont pas exécutées s'il y a un élément sélectionné et j'ai cliqué dans un espace vide je ne sais pas qui l'a upvoted mais son la réponse n'est pas correcte.
j'avais déjà cette partie du code écrit
s'il y a une fonction qui peut convertir les coordonnées souris à un élément listbox alors le problème sera résolu

Répondre

14

Il y a un événement alternatif: MouseDoubleClick, qui fournit MouseEventArgs, de sorte que vous peut obtenir des coordonnées de clic. Ensuite, vous pouvez appeler GetItemBounds() pour obtenir rectangle, contenant l'élément sélectionné et vérifier si les coordonnées de la souris sont dans ce rectangle:

private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     if(listBox1.SelectedIndex != -1) 
     { 
      var rect = listBox1.GetItemRectangle(listBox1.SelectedIndex); 
      if(rect.Contains(e.Location)) 
      { 
       // process item data here 
      } 
     } 
    } 

MouseDoubleClick Informations Version:

  • .NET Framework - Spported dans: 4, 3.5, 3.0, 2.0
  • .NET Framework client Profile - Pris en charge dans: 4, 3.5 SP1
+0

ouais ce je ce que je cherchais, merci :) – Karim

1

Voici ce que j'ai utilisé pour un seul MouseClick, pourrait être adapté.

D'abord, je définis les propriétés de CheckListBox.CheckOnClick sur true: clb.CheckOnClick = true;

alors je forcé l'élément à désélectionner après la boîte checkState a changé:

void clb_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (clb.Items.Count > 0) { clb.SetSelected(0, false); } 
    } 
Questions connexes