c# - valores - Haga clic derecho para seleccionar elementos en un ListBox
seleccionar un item de un listbox c# (3)
Maneje ListBox.MouseDown
y seleccione el ítem allí. Me gusta esto:
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y);
}
Estoy tratando de hacer una lista de elementos con los que puedes hacer varias acciones haciendo clic derecho y tener un menú contextual. Lo he completado, no hay problema en absoluto.
Pero me gustaría tenerlo de modo que cuando haga clic derecho en un elemento, en lugar de dejar el elemento actual seleccionado, seleccione el elemento sobre el que termina el mouse.
Investigué esta y otras preguntas relacionadas e intenté usar indexFromPoint (que encontré a través de mi investigación) pero cada vez que hago clic derecho en un elemento, siempre borra el elemento seleccionado y no muestra el menú contextual. , ya que lo tengo configurado para que no aparezca si no hay un elemento seleccionado.
Aquí está el código que estoy usando actualmente:
ListBox.SelectedIndex = ListBox.IndexFromPoint(Cursor.Position.X, Cursor.Position.Y);
También puede obtener el mismo comportamiento estableciendo un evento MouseRightButtonUp en todo el cuadro de lista y luego:
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;
}
este está trabajando ...
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];
}
}
}