Hola a todos.
Necesito poner texto en etiquetas sin conocer su nombre previamete.
Me explico, quiero poner un texto determinado por software, en una etiqueta cuyo nombre también sea determinado en el programa.
Algo así como:
teniendo un vector con cadenas: t(0) = "a", t(1) = "b", etc.
poner el texto de t(5) en la etiqueta lblN3; t(m) en lblNx...
Tengo el siguiente código que resuelve el problema, aunque con un mal funcionamiento según lo escriba de una u otra forma; y pensando que no es el mejor modo de hacerlo.
Evidentemente, cambiando el orden de los elementos de la lista, los valores que se les pasen serán diferentes.
Ello obliga a crear tantas listas como distribuciones necesite presentar, y luego elegir una mediante un SELECT nn. (Engorroso.)
El problema momentáneo es que si en la rutina "Iniciar", activo la primera línea quitando el apóstrofo: List.AddAll
y deshabilito las últimas: List.Add
el programa no funciona; y no entiendo por qué.
Otra cuestión es si no hay forma de simular algo parecido a usar "objetos" con índice.
Algo así como:
¿Alguna idea?
Gracias por vuestro tiempo.
Necesito poner texto en etiquetas sin conocer su nombre previamete.
Me explico, quiero poner un texto determinado por software, en una etiqueta cuyo nombre también sea determinado en el programa.
Algo así como:
teniendo un vector con cadenas: t(0) = "a", t(1) = "b", etc.
poner el texto de t(5) en la etiqueta lblN3; t(m) en lblNx...
Tengo el siguiente código que resuelve el problema, aunque con un mal funcionamiento según lo escriba de una u otra forma; y pensando que no es el mejor modo de hacerlo.
B4X:
Sub Globals
'These global variables will be redeclared each time
Private btnFin As Button
Private btnOtra As Button
Private lbl1 As Label
Private lbl2 As Label
Private lbl3 As Label
Private lbl4 As Label
Private lbl5 As Label
Private lbl6 As Label
Private Lista As List 'Una lista con las etiquetas anteriores
Dim Salida(6) As Int ' Números prueba para mostrar en las etiquetas
Dim i As Int
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
Lista.Initialize
Iniciar ' Crear la lista
End Sub
Private Sub btnOtra_Click
Dim et As Label ' Etiqueta temporal
' generar valores de prueba
For i = 0 To 5
Salida(i) = 100 + i
Next
' Leer las etiquetas por orden de lugar,
' cuyo nombre no responde aningún tipo de índice
For i = 0 To 5
et = Lista.Get(i)
et.Text = Salida(i)
Next
End Sub
Private Sub btnFin_Click
Activity.Finish
End Sub
' ++++++++++++++++++++++++
Sub Iniciar
'Lista.AddAll(Array As Label(lbl4, lbl3, lbl5, lbl2, lbl1, lbl6))
Lista.Add(lbl4)
Lista.Add(lbl3)
Lista.Add(lbl5)
Lista.Add(lbl2)
Lista.Add(lbl1)
Lista.Add(lbl6)
End Sub
Evidentemente, cambiando el orden de los elementos de la lista, los valores que se les pasen serán diferentes.
Ello obliga a crear tantas listas como distribuciones necesite presentar, y luego elegir una mediante un SELECT nn. (Engorroso.)
El problema momentáneo es que si en la rutina "Iniciar", activo la primera línea quitando el apóstrofo: List.AddAll
y deshabilito las últimas: List.Add
el programa no funciona; y no entiendo por qué.
Otra cuestión es si no hay forma de simular algo parecido a usar "objetos" con índice.
Algo así como:
B4X:
Dim Etiquetas as List
Etiquetas.Initialize
Etiquetas.AddAll(Array As Label(lbl1, lbl2, etc.))
Dim et(n) As Label 'n coincidirá con el No de elementos de Etiquetas
...
For i = 0 to n-1
et(i) = Etiquetas.Get(i)
et(i).text = "xxx"
Next
¿Alguna idea?
Gracias por vuestro tiempo.