Restituire ad un Form un valore passato ad Form secondario
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. [nota 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