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