Italian Applicazione MultiForm

Fulvio75

Well-Known Member
Licensed User
Ciao, sto creando un'app in B4J e ho un form principale con dei menù dove richiamo altri form, il codice di questi form secondari vanno sempre sotto il codice del form main?
Non è possibile creare come delle activity tipo B4A per ogni form che creo?
 

LucaMs

Expert
Licensed User
Longtime User
Crea un progetto di tipo B4XPages; ogni nuova pagina aggiunta risulterà essere un nuovo form.

1669819212388.png



Allego un esempio buttato giù al volo.
 

Attachments

  • Forms.zip
    9.9 KB · Views: 77
Last edited:

LucaMs

Expert
Licensed User
Longtime User
ok funziona... e per inibire il resize del form sul doppio click sul titolo?
Nella clsPage1, nella Sub B4XPage_Created:
B4X:
B4XPages.GetNativeParent(Me).Resizable = False

Meglio ancora, potresti dichiarare nella Class_Globals della stessa pagina una variabile privata, Frm As Form
e poi:
B4X:
Frm = B4XPages.GetNativeParent(Me)
Frm.Resizable = False
così in ogni punto di quella classe potrai fare riferimento a Frm, per eventuali altre necessità.
 

amorosik

Expert
Licensed User
Io avrei fatto al posto di questo

Codice Originale LucaMs:
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
   
    Page1.Initialize
    B4XPages.AddPage("Page1", Page1)
End Sub

'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.

Private Sub Button1_Click
    B4XPages.ShowPage("Page1")
End Sub

avrei fatto questo:

Codice Modificato Amorosik:
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
End Sub

'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.

Private Sub Button1_Click
    Page1.Initialize
    B4XPages.AddPage("Page1", Page1)
    B4XPages.ShowPage("Page1")
End Sub

Che dite, l'initialize eseguito ad ogni pressione del command button, e' corretto oppure no?
Pro e contro delle due versioni?
 

LucaMs

Expert
Licensed User
Longtime User
Che dite, l'initialize eseguito ad ogni pressione del command button, e' corretto oppure no?
Un button di solito lo metti per eseguire più volte del codice, scritto direttamente nella Sub-evento Click o richiamato da questa (meglio).
Potrebbe essere utile, in questo caso, se tu volessi creare più copie della stessa B4XPage, e quindi dello stesso form, ma allora dovresti creare in quella routine un nuovo id pagina, altrimenti non farà altro che mostrare sempre la stessa, scrivendoti un log di warning (solo avvertimento, non errore) che ti avvisa che una pagina con quell'id è già esistente nella collezione B4XPages.

Ripetere un'inizializzazione più volte, in B4X significa re-inizializzare lo stesso oggetto (il che significa anche azzerare eventuali dati contenuti in questo oggetto).

Piccola nota: per creare un nuovo id di pagina in quella routine, dovresti usare una variabile dichiarata a livello di modulo, ovvero nella Class_Globals. Ad esempio una Int, di cui incrementare il valore nel Button1_Click, potendo così creare l'id "Page" & Contatore. Ecco, questo sarebbe uno dei casi in cui le variabili statiche locali farebbero comodo, perché non avresti bisogno della variabile globale (lo scrivo perché se ne è discusso recentemente, anche se non mi pare nel forum italiano).
 
Last edited:
Top