Italian come posso leggere il valore del Tag di una B4XFloatTextField ?

Gianni M

Well-Known Member
Licensed User
Longtime User
ciao,
con l'esempio allegato, ho un pannello e 3 B4XFloatTextField;
clicco sul bottone e posso ottenere il valore delle 3 text;
ma come posso leggere l'attributo "Tag" ?
il Tag viene assegnato in fase di creazione "Visual Designer"
 

Attachments

  • helpMe.zip
    2.4 KB · Views: 93

LucaMs

Expert
Licensed User
Longtime User
B4X:
Sub Button1_Click
    For Each tf As B4XView In Pane1.GetAllViewsRecursive
        If tf.Tag Is B4XFloatTextField Then
            Dim XFloatText As B4XFloatTextField  = tf.Tag
            Log("Text: " & XFloatText.Text)
            Log("Tag : " & XFloatText.Tag)
        End If
    Next
End Sub

O, se non vuoi "sprecare" una variabile:
B4X:
Sub Button1_Click
    For Each tf As B4XView In Pane1.GetAllViewsRecursive
        If tf.Tag Is B4XFloatTextField Then
            Log("Text: " & tf.Tag.As(B4XFloatTextField).Text)
            Log("Tag : " & tf.Tag.As(B4XFloatTextField).Tag)
        End If
    Next
End Sub
 

Gianni M

Well-Known Member
Licensed User
Longtime User
grazie @LucaMs, funziona

in genere siamo soliti scrivere "If tf Is B4XFloatTextField",
ma per me è fuori ogni logica "If tf.Tag Is B4XFloatTextField" ;
 

LucaMs

Expert
Licensed User
Longtime User
grazie @LucaMs, funziona

in genere siamo soliti scrivere "If tf Is B4XFloatTextField",
ma per me è fuori ogni logica "If tf.Tag Is B4XFloatTextField" ;
La cosa è leggermente contorta.

Nelle B4X Custom View in pratica esistono due Tag. Quello... diciamo diretto, contiene un riferimento a... sé stessa, ovvero alla custom view che hai aggiunto nel Designer.
Quindi, se crei una B4XTable nel Designer, ad esempio, che è una B4X Custom View, il suo Tag è la B4XTable stessa, non il tag che imposti nel Designer.
Per accedere al Tag che tu programmatore hai impostato (non solo da Designer, anche se lo avessi impostato da codice), devi prima ottenere "la istanza" (la B4XTable stessa, in questo esemio) dal Tag e convertirlo nel tipo specifico, B4XTable, e leggere il tag di questa (istanza).
Complicato anche spiegarlo!

Prova a rileggere 'sta robaccia 😄 e poi il primo esempio che ho pubblicato.
 

Alexander Stolte

Expert
Licensed User
Longtime User
in genere siamo soliti scrivere "If tf Is B4XFloatTextField",
ma per me è fuori ogni logica "If tf.Tag Is B4XFloatTextField" ;
 

Gianni M

Well-Known Member
Licensed User
Longtime User
inizio del secondo tempo:
se nel layout ci sono diversi B4XFloatTextField, ed ognuno ha il suo Tag ("alfa", "beta", "gamma", ....),
come attivare un focus/RequestFocus su una text con (per esempio) Tag "beta" ????
sembra che questa non funziona "xftf.mBase.RequestFocus"
 

LucaMs

Expert
Licensed User
Longtime User
inizio del secondo tempo:
se nel layout ci sono diversi B4XFloatTextField, ed ognuno ha il suo Tag ("alfa", "beta", "gamma", ....),
come attivare un focus/RequestFocus su una text con (per esempio) Tag "beta" ????
sembra che questa non funziona "xftf.mBase.RequestFocus"
Non funziona perché mBase è il Pane(L) di base della custom view.
Nel tuo progetto è sufficiente:
B4X:
tf.RequestFocus
RequestFocus è anche un metodo di B4XView.


con la proprietà “RequestFocusAndShowKeyboard"
Quello è solo per B4A (che ha tastiera virtuale da visualizzare/nascondere).
 
Top