c# events listbox listboxitem double-click

Evento de clic doble del elemento de cuadro de lista de C#



events listbox (6)

Tengo un cuadro de lista con algunos elementos. ¿Hay alguna forma en que pueda adjuntar un evento de doble clic a cada elemento?

Item 1 Item 2 Item 3

Si tuviera que hacer doble clic en el Elemento 2, aparecería un Messagebox que decía "Item 2"

¿Cómo haría esto?


Esta es una publicación muy antigua, pero si alguien se encuentra con un problema similar y necesita una respuesta rápida:

  • Para capturar si se hace clic en un elemento ListBox, use el evento MouseDown.
  • Para capturar si se hace clic en un elemento en lugar de espacio vacío en el cuadro de lista, compruebe si listBox1.IndexFromPoint(new Point(eX,eY))>=0
  • Para capturar eventos de doble clic, compruebe si e.Clicks == 2

Para 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()); } }

y

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

eso también debería evitar el disparo del evento si selecciona un elemento y luego hace clic en un área en blanco.


Sé que esta pregunta es bastante antigua, pero también estaba buscando una solución a este problema. La solución aceptada es para WinForms, no para WPF, que creo que muchos de los que vienen aquí están buscando.

Para cualquiera que busque una solución WPF , este es un gran enfoque (a través de la respuesta de Oskar here ):

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); } }

Básicamente, sube el VisualTree hasta que haya encontrado un elemento principal que sea un ListBoxItem o suba al ListBox real (y, por lo tanto, no haga clic en ListBoxItem).


Te muestro que usas Visual Studio,

lo que puede hacer por el mismo resultado que desea está en la lista Propiedades de cuadro-> Comportamiento-> AutoPostBack, cámbielo a "Verdadero".

Espero que ayude


WinForms

Agregue un controlador de eventos para el evento Control.DoubleClick para su ListBox , y en ese evento, el manejador abrirá un MessageBox mostrando el elemento seleccionado.

P.ej:

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

Donde ListBox1 es el nombre de su ListBox .

Tenga en cuenta que asignaría el controlador de eventos de esta manera:

ListBox1.DoubleClick += new EventHandler(ListBox1_DoubleClick);

WPF
Más o menos lo mismo que arriba, pero MouseDoubleClick evento MouseDoubleClick lugar:

ListBox1.MouseDoubleClick += new RoutedEventHandler(ListBox1_MouseDoubleClick);

Y el controlador de eventos:

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

Editar: la respuesta de Sisya comprueba si el doble clic se produjo sobre un elemento, que debería incorporarse en este código para solucionar el problema mencionado en los comentarios (se muestra MessageBox si se hace doble clic en ListBox mientras se selecciona un elemento, pero no se hizo clic sobre un elemento).

¡Espero que esto ayude!


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()); } }

Esto debería funcionar ... verificar