Italian riferimento a label tramite indice

sirjo66

Well-Known Member
Licensed User
Longtime User
Ciao a tutti,
volevo sapere se è possibile fare riferimento ad una label tramite una variabile, mi spiego meglio, ho questo codice:
B4X:
Dim Index As Int
Index = (un valore a caso tra 1 e 5)
Select Case Index
   Case 1
       Label1.Background = gdV
   Case 2
       Label2.Background = gdV
   Case 3
       Label3.Background = gdV
   Case 4
       Label4.Background = gdV
   Case 5
       Label5.Background = gdV
End Select

è possibile scrivere il tutto in una sola riga ??
ad esempio qualcosa del genere:
B4X:
Dim Index As Int
Index = (un valore a caso tra 1 e 5)
Label(Index).Background = gdV
in VB.NET si può fare, ma in B4A ??

Avevo pensato di mettere le 5 Label dentro un panel e poi usare Panel.GetView(Index) per recuperare la label corretta, ma non so se è questa la soluzione giusta o se esiste altra soluzione più elegante

Sergio
 

LucaMs

Expert
Licensed User
Longtime User
Suppongo che tu voglia usare il Designer per creare le label.

Dichiara un array di label nella Sub Globals
Private lblNome() As Label

Metti le label in un panel, magari con lo stesso nome, pnlNome.
Poi:
B4X:
Dim Index As Int = 0
For Each Lbl As Label In pnlNome.GetAllViewsRecursive
     lblNome(Index) = Lbl
     Index = Index + 1
Next

Index = (un valore a caso tra 1 e 5)
lblNome(Index).Background = gdV
 

udg

Expert
Licensed User
Longtime User
Come dice @LucaMs non c'è un modo diretto tipo VB.NET per fare ciò che vorresti.
Partendo dal Designer potresti usare il TAG per settare i numeri da 1 a 5 e poi nel codice avresyi un For EAch sulle view della tua Activity/Panel alal ricerca del TAG contenente l'indice che ti occorre.
Ci sono anche esempi di utilizzo di MAP in modo che la chiave sia "LAbelx" con x da 1 a 5 ed il valore sia la label.

Se invece le label le crei direttamente in codice, allora puoi definire da subito un array di label.

Insomma di strade ne esistono diverse. Prova un po' e scegli quella che ti sembra più comoda e lineare (dovendo magari rileggere il codice tra un anno o anche più..).
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…