Italian Button o Label indicizzati

marco.canta

Active Member
Licensed User
Longtime User
Ciao, forse una domanda un po banale ...
ce si puo creare una serie di label o button indicizzati ?
cerco di spiegarmi meglio ... creo 10 button ... quando clikko su uno dei dieci, l'evento click mi indica il button premuto es: button_click(n) ....

Grazie Marco
 

LucaMs

Expert
Licensed User
Longtime User
Ciao.

Se crei il layout tramite Designer, dai a tutti lo stesso nome evento (Event Name qui sotto):
upload_2016-1-27_18-0-5.png


Nel codice avrai:
B4X:
Sub NomeEventoComune_Click
    Dim btn As Button = Sender ' <---- Sender è l'oggetto che ha scatenato l'evento
    ...
End Sub


Se invece aggiungi delle view tramite codice, la cosa migliore è inserirle in una Map.


[P.S. beh, nell'immagine è una EditText, ma è la stessa cosa, ovviamente]
 
Last edited:

marco.canta

Active Member
Licensed User
Longtime User
Grazie Luca, sempre disponibile agli aiutini.

Provato ora ... funziona.
Personalmente pero non mi trovo un gran che in quanto il valore del Sender che mi restituisce non è un indice puro ma un codice identificativo oggetto.
A me sarebbe stato comodo avere un indice da 1 a x ... cosi' da gestirlo con in for.
 

LucaMs

Expert
Licensed User
Longtime User
Se metti tutti i button in un panel puoi gestirli con:
B4X:
For Each btn As Button In Panel1.GetAllViewsRecursive
    btn...

altrimenti puoi usare una Map:

B4X:
Dim mapButtons As Map
mapButtons.Put(0, Button1)
mapButtons.Put(1, Button2)
...

o ancora un array (meglio la Map).
 

sirjo66

Well-Known Member
Licensed User
Longtime User
io per fare questa cosa uso la proprietà Tag dei button
nel primo button, nella proprietà tag, scrivo 1, nel secondo 2 e via così
poi:
B4X:
dim btn as button = sender
dim numerobottone as int = btn.tag
 

marco.canta

Active Member
Licensed User
Longtime User
Funziona tutto e in modo semplice ...
posto il codice di prova cosi se a qualcuno dovesse servire basta un copia e incolla.

B4X:
Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form

    Private Label1 As Label   
    Private Button1 As Button
    Private Button2 As Button
    Private Button3 As Button
    Private Button4 As Button
End Sub

Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    'MainForm.SetFormStyle("UNIFIED")
    MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    MainForm.Show
End Sub


Sub ButtonA_MouseClicked (EventData As MouseEvent)
    Dim btn As Button = Sender
    Dim numerobottone As Int = btn.tag
   
    Label1.Text = numerobottone
End Sub
 

marco.canta

Active Member
Licensed User
Longtime User
Ora che funziona mi é venuta in mente un altra necessita ....
Utilizzando i parametri sender e/o tag si puo cambiare colore di un button usando uno speudo indice ?
Cerco di spiegarmi meglio ... Premo un button di cui so il tag ... E cambiare il colore del button relativo al tag premunto ...
 
Top