elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Por que Un ListBox con mas de 32767 items no funciona
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Por que Un ListBox con mas de 32767 items no funciona  (Leído 2,139 veces)
Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Por que Un ListBox con mas de 32767 items no funciona
« en: 30 Agosto 2015, 17:29 pm »

Hola a todos:

Tengo un problema que me desconcierta, tengo este simple código, para quitar todos los Items seleccionados, el ListBox tiene MultiSelect = 2 - Extended:

Código:
Private Sub NoSeleccion()
    Dim i As Long
    Ocupado = True
    For i = 0 To List2.ListCount - 1
       List2.Selected(i) = False
    Next
    Ocupado = False
End Sub

Pues mi sorpresa es que List2 después de llenarlo tiene 57647 items y este bucle For, simplemente no funciona por que List2.ListCount tiene un valor de -45.
Y además List2.Listindex a partir de 32768 su valor, en lugar de 32769 tiene un valor de -32767.
Por lo que deduzco que el puntero trabaja como Integer + - 32767, he buscado información sobre este tema pero no encuentro nada.

Y entonces que se puede hacer con ListBox que almacenen mas de 32767 items.

Hay alguna forma de solucionar esto, se puede manejar este ListBox mediante SendMessage?

Agradecería cualquier ayuda por que no salgo de mi asombro.

Un saludo.


En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Por que Un ListBox con mas de 32767 items no funciona
« Respuesta #1 en: 31 Agosto 2015, 15:51 pm »

HOLA!!!

Tu deduccion es correcta, es un +/-integer el index y el listcount, soluciones 2:

1, Utilizar un Listview que deberia tener limite long creo.

2, y mas simple para tu codigo, usar una variable CT (contadora) cada vez que agregas o quitas un elemento, de tal manera que sepas la cantidad que tenes, y cuando llegas a 32769 te vas a otro for que empiece desde -32767, todo asi hasta que se complete CT.

GRACIAS POR LEER!!!


En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Por que Un ListBox con mas de 32767 items no funciona
« Respuesta #2 en: 31 Agosto 2015, 22:32 pm »

Gracias por responder:

Lo de seleccionar el contenido del ListBox entero no importa el número de items que tenga, ya lo he solucionado con SendMessage y una sola línea de código.
Código:
SendMessage list.hwnd, LB_SETSEL, True, ByVal -1 'select all
SendMessage list.hwnd, LB_SETSEL, False, ByVal -1 'deselect all

No me gusta utilizar ListView, salvo que sea imprescindible, es mucho mas lioso e innecesario para una simple lista, pero voy a probar tu sugerencia.

Pero ahora lo que necesito es copiar todos los items seleccionados (sucesivos o no) de un ListBox a otro ListBox, y lógicamente con SendMessage, pero no encuentro nada.

Alguna idea?

Un saludo.
« Última modificación: 31 Agosto 2015, 22:34 pm por Fran1946 » En línea

Grave


Desconectado Desconectado

Mensajes: 314


|\|0\/\/ 15 7|-|3 71/\/\3


Ver Perfil WWW
Re: Por que Un ListBox con mas de 32767 items no funciona
« Respuesta #3 en: 1 Septiembre 2015, 04:50 am »

creas tu propio control con soporte para mas elementos solo creas una clase nueva y heredas todo de la clase ListBox y adentro escribes una nueva funcion o propiedad para listcount y al final tendrias que agregar esa clases a los controles generales del editor grafico, no le veo mayor dificultad
En línea

"y el conocimiento os hara libres"

Module Console1
   Console.Write("Hello Word")
   Console.ReadLine()
End Module
http://aion.cr0n0triger.operaunite.com/
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.246


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Por que Un ListBox con mas de 32767 items no funciona
« Respuesta #4 en: 1 Septiembre 2015, 07:07 am »

Pero ahora lo que necesito es copiar todos los items seleccionados (sucesivos o no) de un ListBox a otro ListBox, y lógicamente con SendMessage, pero no encuentro nada.

Revisa esto. (1er. resultado de Google  :silbar:)

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Por que Un ListBox con mas de 32767 items no funciona
« Respuesta #5 en: 1 Septiembre 2015, 20:39 pm »

Hola Grave:
Muchas gracias por tu ayuda, pero esa solución me parece muy complicada, y ademas yo no se hacer una clase de este tipo, si no te importa explicarme como se haría, te lo agradecería y una cosa mas que aprendo.

Hola MCKSys Argentina:
Gracias también a ti por tu ayuda, en el link que me indicas, solo tiene la constante pero no el valor Hex, pero el tener que buscarlo luego me ha servido para encontrar la forma perfecta de hacerlo.
Por si a alguien le sirve, y como agradecimiento lo aporta aquí:

Código:

Public Function CopiarSeleccionados(list As ListBox) As Long
     Dim numSelected As Long, i As Long
    
    'lee el nº de items seleccionados
    'si el listbox es single-select style numSelected retorna -1 (LB_ERR).
    'si el listbox es multiselect style,y niguno es seleccionado,
    'numSelected rettorna 0, si hay seleccionados, numSelected retorna el nº seleccionado (del List.SelCount)
     numSelected = SendMessage(list.hwnd, LB_GETSELCOUNT, 0&, ByVal 0&)
    'debug ...
     'Debug.Print numSelected; " items seleccionados:"
     'Debug.Print "inddice", "item"
     CopiarSeleccionados = 0
     If numSelected > 0 Then
        'dimensiona un array largo para almacenar los items seleccionados
        ReDim sSelected(0 To numSelected - 1) As Long
        'pasa el array a Sendmessage para que lo llene con el item seleccionado
        ret = SendMessage(list.hwnd, LB_GETSELITEMS, numSelected, sSelected(0))
        'debug ...
        For i = 0 To numSelected - 1
            Debug.Print list.list(sSelected(i))   'el contenido del item
            'aqui lo que se necesite
        Next
     End If
End Function


Un saludo a todos.
« Última modificación: 1 Septiembre 2015, 20:41 pm por Fran1946 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como obtener los items de un listbox?
Programación Visual Basic
byway 4 13,234 Último mensaje 13 Septiembre 2008, 08:09 am
por byway
obtener los Items de un listbox
.NET (C#, VB.NET, ASP)
erick185 4 9,133 Último mensaje 7 Abril 2009, 19:19 pm
por DarkItachi
Ayuda con Items de un ListBox vb6.0
Programación Visual Basic
Brian1511 2 2,443 Último mensaje 18 Noviembre 2012, 19:39 pm
por Brian1511
Mover items seleccionados de ListBox e insertarlos en otro ListBox
Programación Visual Basic
Fran1946 2 1,754 Último mensaje 24 Octubre 2015, 01:28 am
por Fran1946
Asignar acciones en los items de un listbox « 1 2 »
Programación Visual Basic
rapbyone 11 6,271 Último mensaje 22 Mayo 2016, 09:01 am
por rapbyone
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines