Jump to content
xboxfile

Seleccionar Item en ListView

Recommended Posts

Hola a tod@s.

Lo primero, quería agradecer al personal de esta web que es de gran ayuda.

Hacía tiempo que no preguntaba nada porque tenía suficiente con leer las anteriores preguntas, pero en esta ocasión no he encontrado nada acerca de mi duda con un control ListView.

Me he iniciado con este tipo de controles por "culpa" de Antoni, es un placer saludarte, porque en una consulta le contestó a un usuario que sí se puede usar la rueda del ratón, cosa que en un Listbox, no se puede.

Mi consulta es una continuidad de una que hizo Antoni en este enlace: 

Yo no le he conseguido.

Estoy cargando datos en un lisview mediante un bucle y quiero que se seleccione un item mientras se carga y dispare el evento Click. Esto funciona en Listbox pero en listview no lo consigo.

¿Puede que tenga que hacer un bucle aparte solo para que busque la selección? En un Listbox si que funciona.

Si me lo permitís, como que es muy grande el proyecto que tengo, pongo el código que uso para la carga de datos, que es lo que interesa.

    Do While HStocks.Cells(x, 1) <> Empty
        CantidadTotalStock = CantidadTotalStock + HStocks.Cells(x, 4)
        NumTodosColores = NumTodosColores + 1
        If HStocks.Cells(x, 1) = GruposColores(0) Or HStocks.Cells(x, 1) = GruposColores(1) Or GruposColores(0) = 10 Then
            Set Item = .ListItems.Add(Text:=HStocks.Cells(x, 2).Value)
            Item.ListSubItems.Add Text:=HStocks.Cells(x, 3).Value
            Item.ListSubItems.Add Text:=HStocks.Cells(x, 4).Value
            Item.ListSubItems.Add Text:=HStocks.Cells(x, 5).Value

                'Este es el código que uso para seleccionarlo. <<<<<<<<<<<<<<<<<<<<
                If ListView1.ListItems(x - 2) = ColorEntrado Then
                    ListView1.ListItems(x - 2).Selected = True
                    ListView1.ListItems(x - 2).EnsureVisible
                    'ListView1_ItemClick ListView1.SelectedItem
                End If
                Fila = Fila + 1
        End If
        
        x = x + 1
    Loop
End With

 

Muchas gracias.

 

Share this post


Link to post
Share on other sites

Hola Leopoldo, gracias por tu ayuda, no es esto, ya lo probé después de postear.

Tiene que ser una tontería, pero hasta que no lo sabes te puedes volver loco.

Sigo investigando

Share this post


Link to post
Share on other sites

Te sugiero que subas un archivo para ver que es lo que realmente necesitas realizar, no necesitas subir todo tu archivo, sube una parte o sube a un servidor externo y compartes el enlace.

Share this post


Link to post
Share on other sites

Hola, gracias por tu ayuda Virgilio.

He preparado un archivo extraido del proyecto que tengo para poder publicarlo. 

En el archivo grande he conseguido que me señale al cargar el Item de la celda activa, pero, no sé porqué, en el ejemplo no funciona.

He añadido un SetFocus.

Lo del evento click automático no lo consigo.

 

Resumiendo, lo que necesito es que al cargar me señale el artículo que tenga en la celda activa y automáticamente salte el evento click para poder mostrar una serie de datos en los Listbox 3 y 4.

Me pasa exáctamente igual que a Antoni en la consulta que hizo en su día.

Subo el archivo de ejemplo.

Espero haberme explicado correctamente.

El enlace: https://drive.google.com/file/d/1I6U3UHxbMdp535cKJ3p9-pAiEpB5QdaK/view?usp=sharing

Nuevamente gracias.

Share this post


Link to post
Share on other sites

Hola, @xboxfile

No entiendo bien que es lo que quieres mostrar en los ListBox3 y 4.

Pero haciendo una revisión a tu código.... te recomiendo que:

1.-Carga el ListView

2.-  Buscas el Registro de la celda activa en el ListView y seleccionas el item.

3.- Procedimiento para cargar los datos en ListBox3 y 4.

Me imagino que al dar click en otro Item del ListView se va a cargar con nueva información ListBox3 y 4.

Saludos.

 

Share this post


Link to post
Share on other sites

Hola, gracias por tu ayuda. 

En el ejemplo solo hay un msgbox cuando clico en un ítem del listview porque es un simple ejemplo. 

Ya probaré reorganizando el código como tú comentas.

¿Cual sería la sintaxis del código para que si uno de los ítems es igual a la celda activa se seleccione?

Es que con los Listbox no tengo problema pero en el Listview no acabo de conseguirlo, todo lo que he visto por Internet es código para seleccionarlo a mano y no automáticamente en un if then.

Gracias

Share this post


Link to post
Share on other sites

Parte del código ya lo tienes, y es fácil encontrar información al respecto.

Busca en la WEB:

1.- CANTIDAD DE ITEMS EN UN LISTVIEW VBA EXCEL

2.- RECORRER UN LISTVIEW VBA EXCEL

3.- SELECCIONAR UN ITEM EN LISTVIEW VBA EXCEL

Y has pruebas con pocos elementos.

Saludos.

P.D.: Y como lo dijiste:

Hace 20 horas, xboxfile dijo:

Por cierto, menudo tesoro has puesto en el enlace.

Le pegaré un vistazo.

Gracias

 

Share this post


Link to post
Share on other sites

Hola. Gracias por tu ayuda. El código ya lo tengo, cuando carga el ListView en un bucle, si detecta que el Item que ha cargado es igual al de la celda activa, que a su vez está dentro de una variable String, lo selecciona.

El problema que tengo es que no logro que se active el evento click automáticamente. Lo voy a tener que activar por código manualmente.

Pongo el código:

Sería dentro del bucle que carga todos los Items, la variable "Fila" es la que va contando los Items cargados:

                'Este es el código que uso para seleccionarlo. <<<<<<<<<<<<<<<<<<<<
                If ListView1.ListItems(Fila) = ColorEntrado Then
                    ListView1.SetFocus
                    ListView1.ListItems(Fila).Selected = True
                    ListView1.ListItems(Fila).EnsureVisible
                End If

 

Gracias nuevamente

Share this post


Link to post
Share on other sites
Cita

El problema que tengo es que no logro que se active el evento click automáticamente. Lo voy a tener que activar por código manualmente.

Me temo que si, pero no veo donde está el problema.

Edited by Antoni

Share this post


Link to post
Share on other sites

Hola Antoni, encantado de saludarte.

Es que tenía un Listbox que lo hacía saltar automáticamente, pero he cambiado a ListView por el tema de que funciona la rueda del ratón, cosa que en los Listbox no funciona, y no lo logro.

Pero en este momento ya lo he solucionado, he modificado un poco la forma de proceder del código y ya está.

Veo que tú no lo conseguiste a raiz de tu consulta, supongo.

 

 

Share this post


Link to post
Share on other sites

Una vez que ha cargado el bucle de los Items mira si la variable que carga la Celda activa al abrir el Userform tiene algo, si lo tiene, activa las macros de carga de los Listbox3 y 4

Lo pongo aquí por si le ayuda a alguien, pero es que forma parte de un Userform grande y puede que tal cuál no le funcione si alguien copia y pega:

Este es el código de carga del ListView:

Private Sub LlenaListView() 'Llena Listview1 según el OptionButton seleccionado

Dim Item As ListItem
Dim CantidadTotalStock As Double
Dim x, Fila, NumTodosColores As Integer

ListView1.ListItems.Clear

With ListView1

    .View = lvwReport '<<< Encabezados
    With .ColumnHeaders
        .Clear  'primero limpiamos y añadimos Nombre del campo y su ancho
        '.Add(index, key, text, width, alignment, icon)
        .Add Text:=HStocks.Range("B2"), Width:=130
        .Add Text:=HStocks.Range("C2"), Width:=48
        .Add Text:=HStocks.Range("D2"), Width:=43
        .Add Text:=HStocks.Range("E2"), Width:=93
    End With
    .HideColumnHeaders = False '<<< Encabezados a la vista
    .Appearance = cc3D
    .FullRowSelect = True
    .Gridlines = True
    
    x = 3
    Fila = 1
    Do While HStocks.Cells(x, 1) <> Empty
        CantidadTotalStock = CantidadTotalStock + HStocks.Cells(x, 4)
        NumTodosColores = NumTodosColores + 1
        If HStocks.Cells(x, 1) = GruposColores(0) Or HStocks.Cells(x, 1) = GruposColores(1) Or GruposColores(0) = 10 Then
            Set Item = .ListItems.Add(Text:=HStocks.Cells(x, 2).Value)
            Item.ListSubItems.Add Text:=HStocks.Cells(x, 3).Value
            Item.ListSubItems.Add Text:=HStocks.Cells(x, 4).Value
            Item.ListSubItems.Add Text:=HStocks.Cells(x, 5).Value

                'Este es el código que uso para seleccionarlo. <<<<<<<<<<<<<<<<<<<<
                If ListView1.ListItems(Fila) = ColorEntrado Then
                    ListView1.SetFocus
                    ListView1.ListItems(Fila).Selected = True
                    ListView1.ListItems(Fila).EnsureVisible
                End If
                
                Fila = Fila + 1
        End If
        
        x = x + 1
    Loop
End With

'Esta es la variable que tiene el valor de la celda activa
If ColorEntrado <> "" Then MuestraFormula '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Label12 = ""
Label13 = ""
Label16 = NumTodosColores & " colores"
Label17 = Int(CantidadTotalStock) & " kilos en total"

End Sub

 

Saludos

 

Share this post


Link to post
Share on other sites

Hola, gracias por tu ayuda. 

En el ejemplo solo hay un msgbox cuando clico en un ítem del listview porque es un simple ejemplo. 

Ya probaré reorganizando el código como tú comentas.

¿Cual sería la sintaxis del código para que si uno de los ítems es igual a la celda activa se seleccione?

Es que con los Listbox no tengo problema pero en el Listview no acabo de conseguirlo, todo lo que he visto por Internet es código para seleccionarlo a mano y no automáticamente en un if then.

Gracias

Share this post


Link to post
Share on other sites

Hola que tal. 

Al final no he conseguido lo de actvar por código el evento clic como lo hace el Listbox.

Estoy seguro que tiene que haber una mano de que se produzca.

Por lo demás, he adaptado el código de otra forma y a seguir para adelante.

Gracias por vuestra ayuda y si la encuentro ya lo pondré en el foro. 

Por mi se puede cerrar el hilo.

Share this post


Link to post
Share on other sites

Hola que tal. 

Al final no he conseguido lo de actvar por código el evento clic como lo hace el Listbox.

Estoy seguro que tiene que haber una mano de que se produzca.

Por lo demás, he adaptado el código de otra forma y a seguir para adelante.

Gracias por vuestra ayuda y si la encuentro ya lo pondré en el foro. 

Por mi se puede cerrar el hilo.

Share this post


Link to post
Share on other sites

Quizás no me he explicado bien, lo que necesito es que al cargar el Listview detecte lo que haya en la celda activa, lo seleccione automáticamente, y salte el evento clic, al estilo del Listbox. 

El seleccionar ya lo he conseguido, pero lo del evento clic no.

Lo que digo es que tiene que haber una forma de conseguirlo, pero como no lo he hecho, pues he modificado el código para que haga lo que necesito y al final me funciona, que es el código que puse arriba, ppr si a alguien le ayuda. 

Muchas gracias 

Edited by xboxfile

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png