|
Página 1 de 1
|
Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
Buenas!
Como estuve con listas dependientes en Calc, hice algo parecido en Gambas.
Pero me encontraba el problema de que no podía ordenar los datos mostrados en la lista.
Me daba problemas el método 2 de este ejemplo
Private Felinos As String[] = ["León", "Tigre", "Leopardo", "Geopardo"]
Private Serpientes As String[] = ["Pitón", "Boa", "Cascabel", "Anaconda", "Cobra"]
Private Aves As String[] = ["Paloma", "Halcón", "Águila"]
Private Tipos As Collection = ["Felinos": Felinos, "Serpientes": Serpientes, "Aves": Aves]
Public Sub Form_Open()
Dim animales As String[]
Me.Title = "Lista dependiente"
'Llenar el combobox con las llaves de Tipos
For Each animales In Tipos
cmbTipos.Add(Tipos.Key)
Next
End
Public Sub cmbTipos_Click()
Metodo2()
End
Public Sub Metodo1()
Dim unanimal As String
Dim listatemp As New String[]
If cmbTipos.Text Then
listatemp = Tipos[cmbTipos.Text]
'Usamos la constante gb.natural para que ordene bien las palabras con tildes
listatemp.Sort(gb.Natural)
lstAnimales.Clear
For Each unanimal In listatemp
lstAnimales.Add(unanimal)
Next
Endif
End
Public Sub Metodo2()
Dim unanimal As String
If cmbTipos.Text Then
lstAnimales.Clear
For Each unanimal In Tipos[cmbTipos.Text]
lstAnimales.Add(unanimal)
Next
lstAnimales.List.Sort(gb.Natural)
Endif
End
Y tuve que dejar el método 2 de esta forma para que funcionase
¿ Cómo es que la primera forma del método 2 no puede ordenar la lista que contiene el listbox y presentarla ?.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#1 Miercoles, 23 Enero 2019, 14:59 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
Citar:
¿ Cómo es que la primera forma del método 2 no puede ordenar la lista que contiene el listbox y presentarla ?.
Si puede... pero no la muestra. Si añades un wait 0.01 después de ordenar la lista se mostrará.
Pero... ¿Qué problema tienes con la propiedad sorted del combobox? Con ella todo esto te sobra.
Aún así... ojo con el sort por muy gb.natural que le pongas. No siempre lo que ordena es correcto. Observa qué hace con los acentos, eñes y demás familia.
Saludos.
=================== No podemos regresar
|
#2 Miercoles, 23 Enero 2019, 16:46 |
|
|
cogier
Charlie Ogier
Aprendiz
Registrado: Septiembre 2018
Mensajes: 99
Edad: 69 Ubicación: Guernsey, Channel Islands
|
Re: Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
Pruebe este código
Felinos As String[] = ["León", "Tigre", "Leopardo", "Geopardo"].Sort(gb.natural)
Serpientes As String[] = ["Pitón", "Boa", "Cascabel", "Anaconda", "Cobra"].Sort(gb.natural)
Aves As String[] = ["Paloma", "Halcón", "Águila"].Sort(gb.natural)
sList As String[] = ["Felinos", "Serpientes", "Aves"].Sort(gb.natural)
Tipos As Collection = ["Felinos": Felinos, "Serpientes": Serpientes, "Aves": Aves]
Public Sub Form_Open()
Me.Title = "Lista dependiente"
cmbTipos.List = sList
End
Public Sub cmbTipos_Click()
lstAnimales.List = Tipos[cmbTipos.Text]
End
|
#3 Miercoles, 23 Enero 2019, 17:50 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
Shell, lstAnimales es un listbox ? si es así yo trabajaba siempre los datos en un string[] lo ordenaba o lo que fuere y luego hacia que lstAnimales.List sea igual a string[]
Saludos.
|
#4 Miercoles, 23 Enero 2019, 20:04 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
Shordi:
Citar:
Si puede... pero no la muestra. Si añades un wait 0.01 después de ordenar la lista se mostrará.
No se me había ocurrido eso.
Citar:
Pero... ¿Qué problema tienes con la propiedad sorted del combobox? Con ella todo esto te sobra.
Puedo añadir en el main del formulario la propiedad sorted=True, que no recordaba eso.
Pero me encuentro el problema cuando ordena palabras con tildes.
Citar:
Aún así... ojo con el sort por muy gb.natural que le pongas. No siempre lo que ordena es correcto. Observa qué hace con los acentos, eñes y demás familia.
¿ Ordenarías de otra forma cuando se usan tildes o eñes ?.
Cogier:
Quizás no es necesario ordenar los arrays individualmente.
Te va a parecer raro, pero esto funciona.
Public Sub cmbTipos_Click()
lstAnimales.List = Tipos[cmbTipos.Text].Sort(gb.Natural)
End
Tipos[cmbTipos.Text] devuelve un array, entonces se le podría aplicar ordenar.
Tincho:
Citar:
Shell, lstAnimales es un listbox ? si es así yo trabajaba siempre los datos en un string[] lo ordenaba o lo que fuere y luego hacia que lstAnimales.List sea igual a string[]
Si. Eso seria una opción.
Os subo el ejemplo. Fijaros el orden de los felinos al seleccionarlo en el combobox y el de las aves.
Saludos
Descripción: |
|
Descargar |
Nombre del archivo: |
ListasDependientes01.tar.gz |
Tamaño: |
12.99 KB |
Descargado: |
26 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
ListasDependientes01.tar.gz |
Tamaño: |
12.99 KB |
Descargado: |
26 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
ListasDependientes01.tar.gz |
Tamaño: |
12.99 KB |
Descargado: |
26 veces |
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Jueves, 24 Enero 2019, 01:33; editado 1 vez
|
#5 Jueves, 24 Enero 2019, 01:30 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
A los que habéis bajado el ejemplo. ¿ Habéis visto el efecto que causa al cambiar el tamaño de la ventana del formulario manualmente ?.
Lo hace con el fondo que tengáis.
El arrangement del formulario está a Horizontal y la propiedad de Resizable esta a True.
De paso comentar que "también" que Autoresize está a True.
El efecto se elimina cambiando la propiedad Resizable a False que es como debe estar.
Si se ajusta automáticamente el formulario al contenido no se debería cambiar manualmente su tamaño.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#6 Viernes, 25 Enero 2019, 13:26 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Ordenar El Contenido De Una Lista Antes De Mostrarla, O Que El Ojo No Lo Vea.
A los que habéis bajado el ejemplo. ¿ Habéis visto el efecto que causa al cambiar el tamaño de la ventana del formulario manualmente ?
Todavía no probé el ejemplo, luego cuando lo haga comento.
Saludos.
|
#7 Viernes, 25 Enero 2019, 15:16 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|