Raggiungere e gestire gli oggetti di FMain da una classe secondaria

Da Gambas-it.org - Wikipedia.

In un progetto didattico supponiamo di avere un Form principale, sul quale sono posti un Button (che chiameremo: "Button1") ed una Label (che chiameremo: "Label1"), nonché un contenitore Panel (che chiameremo: "Panel1") contenente a sua volta due Label ("Label2" e "Label3").
Nel programma è presente anche una classe secondaria, che per l'occasione chiameremo "Cmia.class", istanziata ovviamente nella classe principale "FMain.class".

Scopo del programma didattico è quello di gestire tutti i suddetti oggetti di FMain mediante istruzioni poste nella classe secondaria "Cmia.class". In particolare il programma didattico dovrà assegnare a "Button1" e a "Label1" la Caption: "luna", mentre a "Label2" ed a "Label3" la Caption: "sole".

Il modo più semplice di gestire oggetti presenti nel Form da una classe secondaria è quella di poterli richiamare direttamente all'interno della classe secondaria medesima, ossia poter scrivere così:
FMain.Button1.Caption = "luna"
FMain.Label1.Caption = "luna"
FMain.Label2.Caption = "sole"
FMain.Label3.Caption = "sole"

Per far sì che gli oggetti presenti nel Form principale siano richiamabili da una classe secondaria è necessario rendere pubblici i controlli del Form. Ciò si farà così:
1) in alto a sinistra nel menu cliccare su: "Progetto ", quindi "Proprietà ";
2) nella finestra, che compare, scegliere la scheda "Opzioni ";
3) nella scheda delle "Opzioni" attivare (cambiare da NO a Sì) l'opzione: «I controlli del form sono "Public"».


In alternativa nella classe secondaria "Cmia.class" si potrà sperimentare anche un codice del tipo seguente:

' il seguente codice è scritto nella classe secondaria Cmia.class:

Public Sub cmiaSec(testo As String)

 Dim obj, objsub As Object

 For Each obj In FMain.Children
   Select Case obj.Name
     Case "Button1" 
       obj.Caption = "luna"
     Case "Label1"
       obj.Caption = "luna"
   End Select

   If Object.Type(obj) = "Panel" Then
     For Each objsub In obj.Children
       If Object.Type(objsub) = "Label" Then
         objsub.Caption = "sole"
       Endif
     Next
   Endif
 Next

End