[vb6 sp5] Paar vraagjes over variabelen

Pagina: 1
Acties:

  • DPLuS
  • Registratie: April 2000
  • Niet online
Ik had een paar vraagjes waar ik nergens specifiek antwoord op kon vinden:

Als ik een variabele in een form (form1) een waarde toeken, en ik hoef die variabele maar in 1 ander form (form2) te hebben, moet ik hem dan als public definiëren in Option Explicit?

Ik heb zo in mijn programma een hele hoop vars die public zijn, maar ik vraag me af of dit een hoop geheugen vreet, of dat het eigenlijk niet uit maakt.
Eigenlijk heb ik sommige vars maar 1 keer nodig in een ander form, is er niet een manier om ze te "unsetten", net zoals in PHP, om de resources weer vrij te geven?

[ Voor 5% gewijzigd door DPLuS op 02-01-2004 11:03 ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Misschien kun je de betreffende variabelen als parameter doorgeven aan het aan te roepen form.

Who is John Galt?


  • DPLuS
  • Registratie: April 2000
  • Niet online
Kan ik een parameter als volgt meegeven:
Visual Basic:
1
form2.show intVar1 strVar2 ?

en dan bij het form2 load event:
Visual Basic:
1
Private Sub Form_Load(ByRef intVar1 as integer, byref strVar2 as string)  ?


Stel nu dat ik in form1 het volgende heb staan:
Visual Basic:
1
2
3
4
5
6
Option Explicit

Public strVar1 as String

Private Sub Form_Load() 
strVar1 = "blaat"


Nu unload ik form1 en show ik form2.

In form2 doe ik msgbox form1.strVar1, laadt VB nu de gehele form1 of staat de waarde van strVar1 nog gewoon in het geheugen?

En wat zijn nu precies de voordelen om alle Publieke Vars in een module te zetten?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 27-05 19:32

Gerco

Professional Newbie

Nee, dat kan niet, wat wel kan is dit:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Form 1
--------
Private Sub Command1_Click()
  Form2.LaatZien 1, 2
End Sub

Form 2
--------
Public Sub LaatZien(ByVal iGetal1 As Integer, ByVal iGetal2 As Integer)
  Show
  
  Label1.Caption = CStr(iGetal1)
  Label2.Caption = CStr(iGetal2)
End Sub


Als je *iets* met een form doet (een var accessen bijvoorbeeld) zal VB de form gaan laden, niet laten zien, maar wel laden. Als je dus een var wilt delen tussen verschillende forms gebruik je een global var, een singleton achtig iets of parameters. Waarbij de laatste twee de voorkeur hebben.

[ Voor 32% gewijzigd door Gerco op 02-01-2004 13:02 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • DPLuS
  • Registratie: April 2000
  • Niet online
Maar nogmaals: is er een manier om public var's weer "vrij te geven"?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Public vars (en overigens alle vars, tenzij ze een object zijn) kun je niet "vrij geven", maar je moet al heel wat vars hebben om aan 1Mb geheugen te komen. En in een beetje PC zit wel meer dan dat ;)

Stel je hebt 10 Integers, 20 Strings en nog wat spul, dan zal je geheugen niet snel over 1Kb a 2Kb heen gaan (tenzij de strings natuurlijk behoorlijk gevuld zijn)...

• Een object variabele kun je vrijgeven door op "Nothing" te zetten: Set myObj = Nothing
• Een string variabele kun je "clearen" door deze leeg te maken: myStr = ""
• Arrays kun je eventueel erasen of redimmen naar een kleinere array

...maar dan houdt het zo'n beetje op.

Wel is het zo dat variabelen die je dimt in een sub of functie e.d. alléén maar in die sub of functie blijven bestaan. Zorg dus dat de scope van je variabelen zo klein mogelijk is waar dat kan.

Don't get me wrong: Ik ben ook een bitnueker en als ik ergens 1 byte kan besparen dan zal ik dat ook zeker doen. Ik propageer absoluut niet iets van "Ach, d'r zit genoeg geheugen in iedere PC, ga iets nuttigs doen" ofzo. Maar als je maar een paar public vars hebt die je ergens anders nodig hebt dan so be it...

Wil je vars doorgeven aan een ander form dan zou ik daar:
a) een functie van maken zoals Gerco laat zien
b) public properties van het form van maken zodat je ze kunt vullen voor de form_load event.

en dan ga ik zelf dus meestal voor b ;)

[ Voor 26% gewijzigd door RobIII op 02-01-2004 16:42 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1