Ando con un ejemplo de varias ListBox.En este caso tengo tres ListBox.
Es la estructura jerárquica de una barco.
Tengo tres arrays en los cuales están:
- Brigadas.
- Brigada de cubierta.
- Brigada de máquinas.
Según hacemos click en cada Listbox, se va mostrando datos que se pueden seleccionar en las otras listas.
Naturalmente el primer array sobra.
Prácticamente son condicionales selectivas, pero puede llegar un momento en que serian demasiadas opciones.
Imaginar si pongo nombres o tipo de funciones de la marinería , engrasadores,bomberos,camareros...etc.
PRIVATE Brigadas AS String[] = ["Departamento de cubierta", "Departamento de máquinas"] 'No es necesaria
PRIVATE Cubierta AS String[] = ["Capitán", "Oficiales de puente", "Piloto", "Práctico", "Oficial radioelectrónico", "Patrón", "Maestre", "Contramaestre", "Marineros de cubierta"]
PRIVATE Maquinas AS String[] = ["Jefe de máquinas", "Oficiales de máquinas", "Marineros de máquinas"]
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
END
PUBLIC SUB btnSalir_Click()
ME.Close
END
PUBLIC SUB lstBrigada_Select()
LstDepartamentos.Clear
LstTripulacion.Clear
SELECT CASE lstBrigada.Index
CASE 0
llenarLista(0, Cubierta)
CASE 1
llenarLista(1, Maquinas)
END SELECT
END
PUBLIC SUB llenarLista(indice AS Integer, tabla AS String[])
DIM x AS Integer
LstDepartamentos.Clear
FOR x = 0 TO tabla.Count - 1
LstDepartamentos.Add(tabla[x])
NEXT
END
PUBLIC SUB LstDepartamentos_Select()
DIM x AS Integer
DIM azar AS Integer
LstTripulacion.Clear
FOR x = 1 TO generartripulacion(1, LstDepartamentos.Index) + 1
LstTripulacion.Add(LstDepartamentos.Text & "-" & x)
NEXT
END
PUBLIC FUNCTION generartripulacion(minimo AS Integer, maximo AS Integer) AS Integer
DIM ntrip AS Integer
ntrip = Int(Rnd(minimo, maximo))
RETURN ntrip
END
PRIVATE Cubierta AS String[] = ["Capitán", "Oficiales de puente", "Piloto", "Práctico", "Oficial radioelectrónico", "Patrón", "Maestre", "Contramaestre", "Marineros de cubierta"]
PRIVATE Maquinas AS String[] = ["Jefe de máquinas", "Oficiales de máquinas", "Marineros de máquinas"]
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
END
PUBLIC SUB btnSalir_Click()
ME.Close
END
PUBLIC SUB lstBrigada_Select()
LstDepartamentos.Clear
LstTripulacion.Clear
SELECT CASE lstBrigada.Index
CASE 0
llenarLista(0, Cubierta)
CASE 1
llenarLista(1, Maquinas)
END SELECT
END
PUBLIC SUB llenarLista(indice AS Integer, tabla AS String[])
DIM x AS Integer
LstDepartamentos.Clear
FOR x = 0 TO tabla.Count - 1
LstDepartamentos.Add(tabla[x])
NEXT
END
PUBLIC SUB LstDepartamentos_Select()
DIM x AS Integer
DIM azar AS Integer
LstTripulacion.Clear
FOR x = 1 TO generartripulacion(1, LstDepartamentos.Index) + 1
LstTripulacion.Add(LstDepartamentos.Text & "-" & x)
NEXT
END
PUBLIC FUNCTION generartripulacion(minimo AS Integer, maximo AS Integer) AS Integer
DIM ntrip AS Integer
ntrip = Int(Rnd(minimo, maximo))
RETURN ntrip
END
Ya seria crear arrays por cada tipo de departamento.
¿ Como lo mejorarías ?.¿ Creando un archivo de texto con tablas de varias dimensiones ?. Para esto seria mejor o un formulario
que las crease o importar datos de una hoja de Calc.
Incluso una base de datos.
Saludos.