web-dev-qa-db-fra.com

Clic droit pour sélectionner des éléments dans un contrôle ListBox

J'essaie de créer une liste d'éléments avec lesquels vous pouvez effectuer plusieurs actions en cliquant avec le bouton droit de la souris et en affichant un menu contextuel. J'ai complété ça, pas de problème.

Mais j'aimerais bien que, lorsque vous cliquez avec le bouton droit de la souris sur un élément, au lieu de laisser l'élément actuel sélectionné, l'élément sur lequel se trouve la souris.

J'ai étudié cette question et d'autres questions connexes, et j'ai essayé d'utiliser indexFromPoint (que j'ai trouvé grâce à mes recherches), mais chaque fois que je clique avec le bouton droit de la souris sur un élément, il efface toujours l'élément sélectionné et n'affiche pas le menu contextuel. , tel que je l'ai défini pour qu'il n'apparaisse pas s'il n'y a pas d'élément sélectionné.

Voici le code que j'utilise actuellement:

ListBox.SelectedIndex = ListBox.IndexFromPoint(Cursor.Position.X, Cursor.Position.Y);
20
Ipquarx

Manipulez ListBox.MouseDown et sélectionnez l'élément qui s'y trouve. Comme ça:

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y);
}
33
demoncodemonkey

Celui-ci fonctionne ...

this.ListBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.List_RightClick);

private void List_RightClick(object sender, MouseEventArgs e)
{

    if (e.Button == MouseButtons.Right)
    {
        int index = this.listBox.IndexFromPoint(e.Location);
        if (index != ListBox.NoMatches)
        {
            listBox.Items[index];
        }
    }

}
6
Narottam Goyal

Vous pouvez également obtenir le même comportement en définissant un événement MouseRightButtonUp sur toute la zone de liste, puis:

private void AccountItemsT33_OnMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    // If have selected an item via left click, then do a right click, need to disable that initial selection
    AccountItemsT33.SelectedIndex = -1;
    VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), (sender as ListBox)).OfType<ListBoxItem>().First().IsSelected = true;
}
0
Dave Mateer