C# Listbox Élément Double-Cliquez Sur L'Événement

j'ai une boîte de liste avec quelques articles. Y at-il de toute façon je peux attacher un double événement de clic à chaque élément?

Item 1
Item 2
Item 3

si je devais double-cliquer L'article 2, Une boîte de messagerie disant "L'article 2" apparaîtrait

Comment faire?

45
demandé sur Ozzy 2010-12-15 23:14:27

6 réponses

void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
         int index = this.listBox1.IndexFromPoint(e.Location);
         if (index != System.Windows.Forms.ListBox.NoMatches)
            {
              MessageBox.Show(index.ToString());
            }
     }

ça devrait marcher...cochez la case

96
répondu Dark Knight 2010-12-15 20:24:12

WinForms

Ajouter un handler d'événement pour le Control.DoubleClick événement pour votre ListBox , et dans ce cas handler ouvrir un MessageBox afficher l'article sélectionné.

par exemple:

 private void ListBox1_DoubleClick(object sender, EventArgs e)
 {
     if (ListBox1.SelectedItem != null)
     {
         MessageBox.Show(ListBox1.SelectedItem.ToString());
     }
 }

ListBox1 est le nom de votre ListBox .

notez que vous assignez le gestionnaire d'événements comme ceci:

ListBox1.DoubleClick += new EventHandler(ListBox1_DoubleClick);

WPF

À peu près le même que ci-dessus, mais vous utiliseriez le MouseDoubleClick événement à la place:

ListBox1.MouseDoubleClick += new RoutedEventHandler(ListBox1_MouseDoubleClick);

et le gestionnaire d'événements:

 private void ListBox1_MouseDoubleClick(object sender, RoutedEventArgs e)
 {
     if (ListBox1.SelectedItem != null)
     {
         MessageBox.Show(ListBox1.SelectedItem.ToString());
     }
 }

Edit: réponse de Sisya vérifie si le double-clic s'est produit sur un élément, qui devrait être incorporé dans ce code pour corriger le problème mentionné dans les commentaires (MessageBox s'affiche si ListBox est double-cliqué alors qu'un élément est sélectionné, mais pas cliqué sur un élément).

Espérons que cette aide!

27
répondu Donut 2017-05-23 11:47:23

je sais que cette question est assez ancien, mais je cherchais une solution à ce problème. La solution acceptée est pour WinForms pas WPF que je pense que beaucoup de ceux qui viennent ici sont à la recherche.

pour toute personne à la recherche d'une solution WPF , voici une grande approche (via la réponse D'Oskar ici ):

private void myListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DependencyObject obj = (DependencyObject)e.OriginalSource;

    while (obj != null && obj != myListBox)
    {
        if (obj.GetType() == typeof(ListBoxItem))
        {
             // Do something
             break;
         }
         obj = VisualTreeHelper.GetParent(obj);
    }
}

en gros, vous remontez la VisualTree jusqu'à ce que vous ayez trouvé un élément parent qui est un ListBoxItem, ou vous ascendez vers la liste actuelle (et donc n'a pas cliqué sur un ListBoxItem).

13
répondu msnider 2017-05-23 12:26:07

Pour Winforms

private void listBox1_DoubleClick(object sender, MouseEventArgs e)
    {
        int index = this.listBox1.IndexFromPoint(e.Location);
        if (index != System.Windows.Forms.ListBox.NoMatches)
        {
            MessageBox.Show(listBox1.SelectedItem.ToString());
        }
    }

et

public Form()
{
    InitializeComponent();
    listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick);
}

qui devrait aussi empêcher l'événement de tir si vous sélectionnez un élément, puis cliquez sur une zone vide.

7
répondu Ulti 2012-05-15 13:40:47

je vous montre l'utilisation de Visual Studio,

ce que vous pouvez faire pour le même resualt que vous souhaitez est dans la zone de liste de Propriétés-> Comportement->AutoPostBack changer en "Vrai".

L'espoir qui aidera

0
répondu user8077568 2017-05-28 13:14:32

C'est très ancien poste, mais si quelqu'un a rencontré un problème similaire et besoin d'une réponse rapide:

  • pour capturer si un élément ListBox est cliqué utilisez L'événement MouseDown.
  • pour saisir si un élément est cliqué plutôt que l'espace vide dans la liste cocher la case listBox1.IndexFromPoint(new Point(e.X,e.Y))>=0
  • pour capturer l'événement doubleclick, vérifiez si e.Clicks == 2
0
répondu Cenk 2018-03-25 18:32:11