webentwicklung-frage-antwort-db.com.de

Klicken Sie mit der rechten Maustaste, um Elemente in einer ListBox auszuwählen

Ich versuche, eine Liste von Elementen zu erstellen, mit denen Sie verschiedene Aktionen ausführen können, indem Sie mit der rechten Maustaste klicken und ein Kontextmenü geöffnet wird. Ich habe das erledigt, überhaupt kein Problem.

Aber ich möchte es so haben, dass, wenn Sie mit der rechten Maustaste auf ein Element klicken, anstatt das aktuelle Element ausgewählt zu lassen, das Element auszuwählen, über dem sich der Mauszeiger befindet.

Ich habe diese und andere verwandte Fragen recherchiert und versucht, indexFromPoint zu verwenden (was ich bei meiner Recherche gefunden habe), aber wenn ich mit der rechten Maustaste auf ein Element klicke, wird das ausgewählte Element immer gelöscht und das Kontextmenü nicht angezeigt , da ich es so eingestellt habe, dass es nicht angezeigt wird, wenn kein ausgewähltes Element vorhanden ist.

Hier ist der Code, den ich derzeit verwende:

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

Behandeln Sie ListBox.MouseDown und wählen Sie den Artikel dort aus. So was:

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

dieser arbeitet ...

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

Dasselbe Verhalten kann auch durch Setzen eines MouseRightButtonUp-Ereignisses für das gesamte Listenfeld erzielt werden:

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