Du kan bruge properties istedet for public-variable, så ved du med sikkerhed hvornår data bliver læst skrevet. Dit eget script bliver lidt mere kompliceret, men du får lige pludselig kontrol over hvad der sker:
Option Explicit
'Interne hjælpevariable: ' m_ indeholder værdien '¨b_ Er True, hvis der er skrevet til variablen
Private m_intParentID As Integer Private b_intParentID As Boolean
Private m_strName As String Private b_strName As Boolean
Private m_blnIsActive As Boolean Private b_blnIsActive As Boolean
Public Property Get intParentID() As Integer ' Kaldes når variablen aflæses udefra intParentID = m_intParentID End Property Public Property Let intParentID(vData As Integer) ' Kaldes når vairablen tildeles udefra m_intParentID = vData b_intParentID = True End Property
Public Property Get strName() As String strName = m_strName End Property Public Property Let strName(vData As String) m_strName = vData b_strName = True End Property
Public Property Get blnIsActive() As Boolean blnIsActive = m_blnIsActive End Property Public Property Let blnIsActive(vData As Boolean) m_blnIsActive = vData b_blnIsActive = True End Property
Private Sub Class_Initialize() ' Denne kaldes når klassen oprettes (instantieres) ' Her kan data initialiseres ' OBS! Følgende faktisk er overflødig - det er VB's standardværdier m_intParentID = 0 b_intParentID = False
m_strName = "" b_strName = False
m_blnIsActive = False b_blnIsActive = False End Sub
Public Sub VisUdfyldteVariable() If b_intParentID Then Debug.Print "intParentID=" & m_intParentID If b_strName Then Debug.Print "strName=" & m_strName If b_blnIsActive Then Debug.Print "blnIsActive=" & m_blnIsActive End Sub
-- 0 --
Udadtil (dvs. i de programdele, der anvender klassen), vil det se ud på samme måde som før!
Ja, jeg har selv overvejet løsningen, men gik hurtigt væk fra den igen da jeg syntes det er et stort nummer at gøre ud af det og tænkte at der må findes en nemmere løsning. En lidt bøvlet løsning syntes jeg...
Er det meningen at jeg skal bruge VisUdfyldteVariable() til at se hvilke variabler der er udfyldt?
Jeg kan selvfølgelig alternativt oprette public boolean properties svarende til mine variabler, der hver fortæller om variablen er udfyldt - men stadig en besværlig løsning på problemet.
Kan det virkelig ikke lade sig gøre at sætte empty eller null værdier? Det ville lette det hele, en helt del...
VisUdfyldteVariable() er blot en demonstration - du skal selvfølgelig lave en passende Sub eller Function til dit eget brug.
Jeg ved godt at det er besværligt at bruge properties, men det er ofte besværet værd - der er ikke rigtigt andre måder at gøre det på. Der er dog hjælp at hente - der følger en udmærket Wizard med (der også kan bruges for allerede oprettede klasser), den kan aktiveres ved at add'e et klassemodul (altså lade som om man vil oprette en ny) og vælge "VB Class Builder". Koden er lidt omfattende, men den er der, uden at man selv skal gøre noget.
Der er dog et muligt alternativ, HVIS du har nogle værdier som du VED aldrig forekommer i praksis - du kan så blot initialisere dine variable med disse værdier i Class_Initialize og så blot teste på denne værdi senere, altså:
Private Sub Class_Initialize() intParentID = -1 strName = "Denne er tom" blnIsActive = False End Sub - dette virker dog ikke for blnIsActive!
/Claus
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.