Spanish Como es lo inverso del Sender?

roerGarcia

Active Member
Licensed User
Hola a todos.

Cuando tienes dos vistas o views (panel, label, textfield) y lo "clonas" puedes detectar cual fue el elemento activado, al que se le dio clic, por ejemplo, igualando otra variable = Sender.

Pero... cuando tienes digamos, seis paneles, con el mismo layout, con varios elementos dentro, como manipulas digamos... el numero cuatro de los seis? (estos paneles se habrian agregado mediante codigo, posicionado segun conviene en la forma)

La unica manera es recorrer las vistas del contenedor, comparara el valor buscado con uno almacenado en el tag y entonces... las vistas del layouyt cargado en el panel clonado son accesibles?

que sigue de alli? mielemento = vista.actual.del.contenedor ?
mielemento.campo.del.layout.cargado = nuevo.valor?

Por su atencion, gracias.

Saludos
 

José J. Aguilar

Well-Known Member
Licensed User
Hola:

Como no sabemos cómo es tu diseño, sólo se puede hacer alguna suposición.
Si tu tienes un panel con label, edittext, etc.. dentro, y digamos que obtienes el panel con el sender, obtienes cada vista que hay dentro del panel con getview.
Por ejemplo, panel.getview(3) 'sería la cuarta vista, ya que empiezan en 0. Si es por ej. label harías
B4X:
Dim p as panel = sender
Dim mylabel as label = panel.getview(3)
mylabel.text = "mi nuevo texto"
 

roerGarcia

Active Member
Licensed User
El diseño es asi:
La idea es mostrar el estado de varios dispositivos iguales mediante ese arreglo de paneles.
Entonces, cada panel contiene un boton y tres LEDs, asumo que estos deben estar declarados con Dim o Private y asi, luego, panel.señalado.getview(2),backgroundcolor = color - a reserva de checar si aplica la propiedad.

supongo tambien que getview es android y getnode el equivalente b4j
Gracias José

1589125976313.png
 

oparra

Well-Known Member
Licensed User
Tips si te ayuda.

B4X:
Dim p as panel = sender
For Each v As B4XView In p.GetAllViewsRecursive
        If v.Tag = "Id" Then .....
   Next
B4X:
Dim p as panel = sender
For Each v As B4XView In p.GetAllViewsRecursive
   If v Is Button Then
     Dim b As Button = v
    .....
   End If
   If v Is Label Then
     Dim l As Label = v
     ' ........
   End If
Next
 

oparra

Well-Known Member
Licensed User
B4X:
Dim b As Button
b.Initialize("Button")

Private Sub Button_Click '--- generico cuando crea los button en paneles clonados
    Dim b As B4XView = Sender

    For Each v As B4XView In b.Parent.GetAllViewsRecursive ' recursivo al padre del button si esta en panel los hijos del panel
       If v Is Button Then
         Dim b As Button = v
        .....
       End If
       If v Is Label Then
         Dim l As Label = v
         ' ........
       End If
    Next
End Sub
 
Top