Restituire ad un Form un valore passato ad Form secondario

Da Gambas-it.org - Wikipedia.

Nel caso si debba restituire ad un Form principale un valore passato e gestito dalla Classe di un Form secondario, e più in generale, per restituire ad una Classe principale il valore passato da questa ad un Casse secondaria, bisognerà passare alla Classe secondaria (Form secondario) un Oggetto del tipo del valore che si intende passare. Inoltre nella Classe/Form secondaria si dovrà utilizzare il Metodo nascosto "_new( )".

Infatti l'Oggetto viene passato ad un'altra procedura per "indirizzo" di memoria. Infatti, poiché gli Oggetti sono passati per "Indirizzo", ogni modifica al loro contenuto viene mantenuta all'uscita dalla funzione che li ha gestiti. |1|


Vediamo dunque un esempio pratico.

Nel Form principale abbiamo un Button ed il codice:

Public Sub Button1_Click()  
 
 Dim fs As Form_secondario
 Dim bb As New Byte[1]
  
  bb[0] = 99
  
  fs = New Form_secondario(bb, "Form secondario")
  
  fs.Show
  
  Print "Valore ricevuto dal 'Form' principale proveniente dal 'Form_secondario': "; bb[0]
  
End


Mentre nel Form secondario (che chiamiamo ad esempio: Form_secondario) abbiamo un Button ed il seguente codice:

Public Sub _new(by As Byte[], nome As String)
      
  Me.Caption = nome
   
  Print "Valore ricevuto dal 'Form_secondario' proveniente dal 'Form' principale:  "; by[0]
   
  by[0] += 1
      
End
     
     
Public Sub Button1_Click()  
          
  Me.Close()  
     
End


Ugualmente, se il Form/Classe principale passa ad un Form/Classe secondario una stringa, e da quest'ultimo deve ricevere una stringa, avremo nel Form principale:

Public Sub Form_Open()
 
 Dim fs As Form_secondario
 Dim bb As New String[1]
 
   bb[0] = "Testo iniziale"
 
  fs = New Form_secondario(bb, "Form secondario")
  
  fs.Show()
  
  Print "Valore ricevuto dal 'Form' principale proveniente dal 'Form_secondario': "; bb[0]
  
End

Mentre nel Form secondario:

Public Sub _new(by As String[], nome As String)
 
 Me.Caption = nome
 
 Print "Valore ricevuto dal 'Form_secondario' proveniente dal 'Form' principale: "; by[0]
 
 by[0] = "Testo modificato"
  
End



Note

[1] Vedere anche qui: http://www.gambas-it.org/smf/index.php?topic=1259.msg14106#msg14106