Rešenje za problem kako pozvati formu i proslediti joj objekat po referenci
Napomena: Stručni izrazi, definicije i sam kod možda nisu tačni (ja nisam profesionalac već amater) pa su ispravke-dopune dobrodošle.
Kod za klasu clsPodaci:
Code:
Option Explicit
Private m_A As Double
Private m_B As Double
Public Property Let A(ByVal vData As Double)
m_A = vData
End Property
Public Property Get A() As Double
A = m_A
End Property
Public Property Let B(ByVal vData As Double)
m_B = vData
End Property
Public Property Get B() As Double
B = m_B
End Property
Kod za glavnu forma 1
Code:
Private obj1 As clsPodaci
Private obj2 As clsPodaci
Private Sub Command1_Click()
Debug.Print "Pre ulaza u formu 2 obj1.A = ", obj1.A
'Prosledjuje obj1 formi 2
Form2.InicijalizujFormu obj1
Debug.Print "Po izlasku iz forme 2 obj1.A = ", obj1.A
End Sub
Private Sub Command2_Click()
Debug.Print "Pre ulaza u formu 2 obj2.A = ", obj2.A
'Prosledjuje obj2 formi 2
Form2.InicijalizujFormu obj2
Debug.Print "Po izlasku iz forme 2 obj2.A = ", obj2.A
End Sub
Private Sub Form_Load()
Set obj1 = New clsPodaci
Set obj2 = New clsPodaci
obj1.A = 10#
obj1.B = 15#
obj2.A = 20#
obj2.B = 30#
End Sub
U formi se kreiraju dva objekta obj1 i obj2 i postavljaju im se vrednosti za A i B.
Klikom da dugme 1 ili 2 prosleđuje se različit objekat pozivom "InicijalizujFormu" iz forme 2. Forma 2 se ne poziva klasično "Form2.Show vbModal" već je kreiran Sub "InicijalizujFormu" u formi 2 kojoj prosleđujemo objekat.
Kod za formu 2:
Code:
Option Explicit
Private m_obj As clsPodaci
Public Sub InicijalizujFormu(ByRef obj As clsPodaci)
'Graska koju sam pravio
'Ovaj kod pri kompajliranju javlja gresku
'Set m_obj = New clsPodaci
'm_obj = obj
'Ispravan postupak
Set m_obj = obj 'predaja lokalnom objektu po referenci
Me.Show vbModal 'prikazi formu i postavi je na vbModal
End Sub
Private Sub Command1_Click()
m_obj.A = m_obj.A + m_obj.B
Unload Me
End Sub
Sub InicijalizujFormu prima prosleđeni objekat i on se predaje lokalnom objektu m_obj po referenci. Sada m_obj možemo koristiti bilo gde u formi 2 da promenimo prosleđeni objekat što je i učinjeno u Command1_Click().
Napomena:
Ako se forma 2 pozove naredbom Form2.Show vbModal iz forme 1 javiće se greška pri pritisku na dugme Command1, u formi 2, jer m_obj nije inicijalizovana.
Nadam se da je ovo ispravno i da će nekome koristiti :).
Pozdrav