Evento dobleclick en ListBox

Moderador: raul338

C#, tambien llamado C Sharp

Evento dobleclick en ListBox

Notapor ciberjuanma » Sab Ene 17, 2009 5:34 pm

Hola, mi consulta es la siguiente: necesito generar un evento que al hacer dobleclick en uno de los items del listbox me abra un form.
ciberjuanma
Novato
Novato
 
Mensajes: 12
Registrado: Mar Ene 13, 2009 11:05 pm


Re: Evento dobleclick en ListBox

Notapor gonso » Dom Ene 18, 2009 3:21 pm

El listbox tiene un evento para un dobleclick... selecciona el listbox y vete a propiedades (botón derecho del ratón, la última opción), selecciona ver eventos (el botón que parece un rayo), en la lista de eventos ve a Doubleclick...y haz dobleclick sobre el espacio que hay a su derecha... te llevará al código para el evento Doubleclick
Este evento ocurre cuando haces dobleclick en cualquier parte del listbox...

Como imagino que lo que quieres es que te abra un form cuando haces dobleclick sobre un elemento concreto de la lista... lo mejor es que verifiques cual es el elemento seleccionado, si es el que deseas que te abra el form, si no que haga lo que le pidas.

Código: Seleccionar todo
  1. private void listBox1_DoubleClick(object sender, EventArgs e)

  2.         {

  3.  

  4.             if (listBox1.SelectedIndex == 0)

  5.             {

  6.                 MessageBox.Show("1 elemento seleccionado");

  7.             }

  8.             else

  9.             {

  10.                 MessageBox.Show("2 elemento seleccionado");

  11.             }

  12.         }



Yo he usado la propiedad SelectedIndex (recuerda que el primer elemento es el 0, el segundo el 1... el n el n-1)
También puedes compararlo con el texto del elemento seleccionado, por ejemplo imagina que tu listbox tiene dos elementos uno con un texto "Hola" y otro "Adios".
Quedaría tal que así:
Código: Seleccionar todo
  1. private void listBox1_DoubleClick(object sender, EventArgs e)

  2.         {

  3.  

  4.             if (listBox1.Text=="Hola")

  5.             {

  6.                 MessageBox.Show("1 elemento seleccionado");

  7.             }

  8.             else

  9.             {

  10.                 MessageBox.Show("2 elemento seleccionado");

  11.             }

  12.         }

  13.  



Evidentemente debes cambiar los MessageBox por el código para que abra tu form o que haga lo que le pidas.

Espero que te sirva.

Saludos.
gonso
Usuario Activo
Usuario Activo
 
Mensajes: 44
Registrado: Dom Nov 05, 2006 4:00 am


Re: Evento dobleclick en ListBox

Notapor ciberjuanma » Dom Ene 18, 2009 7:45 pm

gracias por la respuesta, pero si vos probas, el evento no funciona solo cuando haces doble click en un item del listbox. Si vos por ejemplo seleccionas un item y despues haces doble click en cualquier lugar del listbox en blanco, el evento se ejecuta igual.
ciberjuanma
Novato
Novato
 
Mensajes: 12
Registrado: Mar Ene 13, 2009 11:05 pm

Re: Evento dobleclick en ListBox

Notapor gonso » Lun Ene 19, 2009 6:43 am

ciberjuanma escribió:gracias por la respuesta, pero si vos probas, el evento no funciona solo cuando haces doble click en un item del listbox. Si vos por ejemplo seleccionas un item y despues haces doble click en cualquier lugar del listbox en blanco, el evento se ejecuta igual.


Si eso es un problema, deberás cambiar el evento doubleclick por MouseDoubleClick (así accedemos a las coordenadas dónde se hizo click).

Calculas cuanto ocupan los elementos de tu listbox a lo alto (no lo hago a lo ancho porque aunque pinche a la derecha de un texto sigue seleccionándolo) a través de listbox1.GetItemHeight(i) - siendo i el elemento del que quieres calcular su altura en base 0, es decir el primer elemento es el 0, el segundo el 1, etc.. - (puedes hacer un foreach o un for para recorrer todos los elementos de tu lista y almacenar en una variable el alto que ocupan.

Una vez que tienes dicha variable (es decir, conoces el alto que ocupan tus elementos en el list box) compara la coordenada Y del mouse al hacer doubleclick (a través del EventArgs e del MouseDoubleClick, es decir, e.Y)... si la coordenada es mayor que la variable es que has hecho doble click fuera de los elementos, con lo que deberás indicar al programa que no haga nada, si la coordenada es menor es que se ha hecho click en un elemento de la lista, de hecho el primer click lo selecciona y el segundo ejecuta tu evento MouseDoubleClick... con lo que puedes ya aplicar lo que te he dicho en el post anterior.

Espero que te sirva.

Saludos.
gonso
Usuario Activo
Usuario Activo
 
Mensajes: 44
Registrado: Dom Nov 05, 2006 4:00 am

Re: Evento dobleclick en ListBox

Notapor ciberjuanma » Lun Ene 19, 2009 11:58 pm

Gracias amigo. A la tarde me puse a probar justamente con las coordenadas del mouse y lo logré. Encontre un método que simplifica todo.
Acá va el código para quien lo necesite:

private void listboxNombres_DobleClickItem(object sender, MouseEventArgs e)
{ //el método devuelve el indice del elemento del listbox al que se le hizo doble click comparando coordenadas del mouse y el item de la lista
if(lstbxNombres.IndexFromPoint(e.X,e.Y)>=0)//consulto si el indice devuelto corresponde a uno de la listbox
ModificarItem();
}
ciberjuanma
Novato
Novato
 
Mensajes: 12
Registrado: Mar Ene 13, 2009 11:05 pm


    

Volver a C#

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron