Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

VB6 Kako proslediti objekat formi po referenci

[es] :: Visual Basic 6 :: VB6 Kako proslediti objekat formi po referenci

[ Pregleda: 2420 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

[ivans]

Član broj: 59211
Poruke: 76
*.nat.medianis.net.



+3 Profil

icon VB6 Kako proslediti objekat formi po referenci10.11.2010. u 21:40 - pre 162 meseci
Pozdrav svima,
imam početničko pitanje, a ono se sastoji u sledećem:

U programu postoje dve forme.
Na glavnoj formi nalaze se nekoliko dugmadi. Svako dugme poziva formu 2 (forma 2 se prikazuje modalno) i prosleđuje joj drugi objekat po referenci (dugme 1 poziva formu 2 i prosleđuje joj objekat A, dugme 2 poziva formu 2 i porosleđuje joj objekat B,....). Objekti su kreirani iz iste klase. Objekti moraju biti predati po referenci jer se menjaju u formi 2.

Kako proslediti objekat formi po referenci?

Nadam se da sam bio dovoljno jasan.

Hvala
 
Odgovor na temu

vuchko.vuchko

Član broj: 217112
Poruke: 301
*.teol.net.



+2 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci11.11.2010. u 09:23 - pre 162 meseci
Ja te bas i nisam skontao...
Kakav je objekat u pitanju i na koji ga nacin prosledjujes drugoj formi?

Mozda da okacis projekat ili neki slican primjer pa da se pozabavimo time.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci11.11.2010. u 09:36 - pre 162 meseci
Zar nije po default-u prosledjivanje objekata po referenci? Ako nije, probaj da dodas byref (izguglaj kako tacno, ne secam se, davno bese vreme sestice:) ).
 
Odgovor na temu

[ivans]

Član broj: 59211
Poruke: 76
*.nat.medianis.net.



+3 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci11.11.2010. u 17:56 - pre 162 meseci
Citat:
vuchko.vuchko: Ja te bas i nisam skontao...
Kakav je objekat u pitanju i na koji ga nacin prosledjujes drugoj formi?

Mozda da okacis projekat ili neki slican primjer pa da se pozabavimo time.



Klasa objekta je vrlo prosta:
Klasa 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 prvu (glavnu) formu:

Code:

Private obj1 As clsPodaci
Private obj2 As clsPodaci

Private Sub Command1_Click()
    'treba prikazati formu 2 i proslediti joj objekat obj1
    Form2.Show vbModal
    
End Sub

Private Sub Command2_Click()
    'treba prikazati formu 2 i proslediti joj objekat obj1
    Form2.Show vbModal
    
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


Klikom na dugme jedan ili dva treba da se prosledi odgovarajući objekat formi 2. U formi dva se vrši izračunavanje i menja se prosleđen objekat(menjaju se vrednosti A i B). Po povratku iz forme objekat treba da ima nove vrednosti za A i B.

Nadam se da sam sada bio jasan :)


 
Odgovor na temu

vuchko.vuchko

Član broj: 217112
Poruke: 301
*.teol.net.



+2 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci11.11.2010. u 19:19 - pre 162 meseci
Mozda je ovde problem

Code:
Private obj1 As clsPodaci
Private obj2 As clsPodaci
ti ih dimenzionises da su "private", trebao bi "public"

Al mislim da sam te skapirao sta ti treba. Evo jedan primjer pa ako ti to moze pomoci, a ako ne javi se pa cemo rjesiti na neki drugi nacin.


S' tim da sam ja u primjeru koristio obicne variable a ne objekte!
Prikačeni fajlovi
 
Odgovor na temu

[ivans]

Član broj: 59211
Poruke: 76
*.nat.medianis.net.



+3 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci11.11.2010. u 20:32 - pre 162 meseci
Citat:
vuchko.vuchko: Mozda je ovde problem

Code:
Private obj1 As clsPodaci
Private obj2 As clsPodaci
ti ih dimenzionises da su "private", trebao bi "public"

Al mislim da sam te skapirao sta ti treba. Evo jedan primjer pa ako ti to moze pomoci, a ako ne javi se pa cemo rjesiti na neki drugi nacin.


S' tim da sam ja u primjeru koristio obicne variable a ne objekte!


Hvala na primeru, ali to nije ogovor na moje pitanje. Trenutno program koristi globalne objekte, a u formi 2 se ispituje koji je objekat aktivan i njegove vrednosti se menjaju. Hteo sam neko elegantnije rešenje :).

Sledeći kod delimično radi:

forma 1

Code:
 Private Sub Command1_Click()
    'treba prikazati formu 2 i proslediti joj objekat ojb1
    'Form2.Show vbModal
    
    Form2.InicijalizujFormu obj1
    Debug.Print obj1.A 
End Sub


forma 2

Code:

Public Sub InicijalizujFormu(ByRef obj As clsPodaci)
    obj.A = 100#

    Me.Show vbModal
End Sub

Private Sub Command1_Click()
    Unload Me
End Sub


Kreirao sam Public Sub InicijalizujFormu u formi 2. Prosleđujem joj objekat koji želim (u ovom slučaju, klikom na dugme 1, prosleđujem objekat 1).
U ovoj funkciji ojb.A = 100# radi i po povratku u formi 1 vrednost je promenjena na 100.


Sada treba omogućiti bilo kojoj funkciji, unutar forme 2, da može menjati vrednost objekta. Imaš neki predlog?

Pozdrav
Prikačeni fajlovi
 
Odgovor na temu

vuchko.vuchko

Član broj: 217112
Poruke: 301
*.teol.net.



+2 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci11.11.2010. u 22:22 - pre 162 meseci
Ima dosta nacina da se to uradi, stvar je u kombinovanju poznatih metoda...

Evo u ovom primjeru sam "sklepao" dva nacina koja provjereno rade, sigurno je da se ovo moze i bolje, al ukljuci malo i ti inspiracije . Javi jel ti ovo pashe!
Prikačeni fajlovi
 
Odgovor na temu

[ivans]

Član broj: 59211
Poruke: 76
*.nat.medianis.net.



+3 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci11.11.2010. u 23:01 - pre 162 meseci
Primer za formu 2 ne može da se iskoristi jer uvek gleda obj1.
Primer za formu 3 može.
Jel postoji mogućnost predati objekat drugom objektu . Primer za formu 3:

Code:

Private tmpObj as clsPodaci

Public Sub Iniciraj(ByRef obj As clsPodaci)

Set tmpObj = New clsPodaci

End Sub

Private Sub Command1_Click()
tmpObj.A = 100#
Unload Me
End Sub
 
Odgovor na temu

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci12.11.2010. u 09:03 - pre 162 meseci
Po defaultu se objekti prosledjuju po referenci.

Code:

Dim a As Integer

Private Sub Form_Load()
    a = 5

    Uvecaj a
    
    Debug.Print a
    
End Sub


Private Function Uvecaj(a As Integer)
    
    a = a + 1
    Debug.Print a
    
End Function


U ovom primjeru varijebli 'a' je podesena vrijednost 5. Ta varijabla se prosledjuje kao parametar funkciji 'Uvecaj' po referenci, a to se vidi tako sto f-ja 'Uvecaj' postavi vrijednost var. na 6 pa nakon izlaska iz funkcije ta varijabla ima vrijednost 6.

Code:

Dim a As Integer

Private Sub Form_Load()
    a = 5

    Uvecaj a
    
    Debug.Print a
    
End Sub


Private Function Uvecaj(ByVal a As Integer)
    
    a = a + 1
    Debug.Print a
    
End Function


U drugom primjeru koji se odnost na prosledjivanje po vrijednosti se vidi da će varijabla 'a' nakon izlaska iz f-je zadržati vrijednost 5.
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
Odgovor na temu

[ivans]

Član broj: 59211
Poruke: 76
*.qwerty.ru.



+3 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci12.11.2010. u 09:32 - pre 162 meseci
@dava

Razumem tvoj kod, ali to nije odgovor na moje postavljeno pitanje.

Pitanje je glasilo kako proslediti različite objekte (koji imaju istu klasu) jednoj (univerzalnoj) formi, izvršiti neki proračun i promeniti vrednosti tog objekta tako da objekat po povratku iz te forme promenjen.

Primer:

U windows exploreru za svaki fajl desnim klikom miša možemo pozvati istu formu "Properties" gde su upisani podaci vezani za taj fajl. U ovoj formi možemo promeniti osobine fajla (primer sakriti fajl) i po povratku iz ove forme fajl je promenio osobinu vidljivost. Znači da u njegovom kodu postoji objekat tipa fajl (objekat je različit za svaki faj) koji se prosleđuje istoj univerzalnoj formi (ista je za sve fajlove), menja se osobina tog objekta u formi i objekat ostaje promenjen po izlazku iz te forme.

Nadam se da sam ovim primerom bio jasan :))
 
Odgovor na temu

vuchko.vuchko

Član broj: 217112
Poruke: 301
*.teol.net.



+2 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci12.11.2010. u 11:23 - pre 162 meseci
Pa jel ti ne rjesava problem ovo moje rjesenje sa formom 3???
 
Odgovor na temu

[ivans]

Član broj: 59211
Poruke: 76
*.nat.medianis.net.



+3 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci13.11.2010. u 05:45 - pre 162 meseci
Citat:
vuchko.vuchko: Pa jel ti ne rjesava problem ovo moje rjesenje sa formom 3???


Hvala na tvom rešenju i ono rešava primer koji sam postavio. Kod stvarne aplikacije, kao što je moja, klasa ima veliki broj podataka pa je ovaj postupak teško upotrebljiv (treba pistati dosta koda u formi 2).

Problem sam rešio i napisaću ta u sledećam postu.

Pozdrav

 
Odgovor na temu

[ivans]

Član broj: 59211
Poruke: 76
*.nat.medianis.net.



+3 Profil

icon Re: VB6 Kako proslediti objekat formi po referenci13.11.2010. u 06:20 - pre 162 meseci
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
 
Odgovor na temu

[es] :: Visual Basic 6 :: VB6 Kako proslediti objekat formi po referenci

[ Pregleda: 2420 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.