Richard87 Skrevet 27. oktober 2005 Del Skrevet 27. oktober 2005 (endret) Jeg har en collection med egen definerte classer som jeg skulle ha lagret til hardisken og hente opp igjenn... er det mulig og bruke propertybag til dette? class'en min bestar av folgende: 'clsItems Public Text As String Public Application As String Public Icon As Picture Ingenting egentlig, men hvordan kan jeg lagre en hauv(collection) av disse fort og enkelt? [EDIT] Ikke lost avlike vel... TRENGER HJELP! hvordan kan jeg lagre en collection av objecter enkelt? btw koden min er na: Public Function Save(StrName As String, Obj As Object) Dim FF As Long, b() As Byte FF = FreeFile Open strData For Binary Access Write As #FF Dim PB As New PropertyBag PB.WriteProperty StrName, Obj Put #FF, , PB.Contents Close #FF End Function Eksempel kode: Dim User As New clsUser User.Password = "test" User.UserID = Users.Count User.UserName = "Administrator" Users.Add User, User.UserName Save.Save "Users", Users clsUser: Option Explicit Public UserID As Long Public UserName As String Public Password As String Endret 27. oktober 2005 av Richard87 Lenke til kommentar
Gjakmarrja Skrevet 28. oktober 2005 Del Skrevet 28. oktober 2005 Vil du lagre objects med properties til harddisk? Lenke til kommentar
aadnk Skrevet 28. oktober 2005 Del Skrevet 28. oktober 2005 (endret) For å få dette til å fungere, må du endre Persistable-egenskapen til klassemodulen din til «1 - Persistable», slik at du får tilgang til ReadProperty- og WriteProperty-hendelsene. Denne egenskapen blir kun tilgjengelig dersom klassen er synlig utenfor prosjektrekkevidden - dvs. at Instancing ikke er avmarkert som «1 - Private» - hvilket simpelthen ikke kan gjøres dersom prosjektet ditt er av typen Standard EXE. I så fall må du enten plassere klassemodulen i en ekstern DLL-fil (ActiveX DLL), eller endre prosjekttypen innunder Project -> [prosjektnavn] Properties -> Project Type til ActiveX EXE. I samme slengen er det nok fordelaktig å sette Start Mode (lokalisert under klaffen Component) til Standalone. I hvert fall, i ditt tilfelle blir koden som følger: Private Sub Class_ReadProperties(PropBag As PropertyBag) Set Icon = PropBag.ReadProperty("Icon", Nothing) Text = PropBag.ReadProperty("Text", "") Application = PropBag.ReadProperty("Application", "") End Sub Private Sub Class_WriteProperties(PropBag As PropertyBag) PropBag.WriteProperty "Icon", Icon PropBag.WriteProperty "Text", Text, "" PropBag.WriteProperty "Application", Application, "" End Sub Denne metoden er for øvrig kun egnet for mindre datamengder der antall elementer ikke overstiger 1000. Dersom du skal lagre mer data, kan du enten benytte en array (og laste inn klassemodulene når det trengs), eller et databasesystem. Endret 28. oktober 2005 av aadnk Lenke til kommentar
Gjakmarrja Skrevet 28. oktober 2005 Del Skrevet 28. oktober 2005 LOL :!: I gotta say aadnk... du eier visual basic forumet :!: Your the man Lenke til kommentar
Richard87 Skrevet 28. oktober 2005 Forfatter Del Skrevet 28. oktober 2005 (endret) Hehe, indeed chills, men det sa ganske mye mer stress ut... her er enn annen losning jeg bruker na.. (la til en "Contents" funksjon i clsUser.. Option Explicit Public UserID As Long Public UserName As String Public Password As String Private pb As New PropertyBag Public Property Get Contents() pb.WriteProperty "UserID", UserID pb.WriteProperty "UserName", UserName pb.WriteProperty "Password", Password Contents = pb.Contents End Property Public Property Let Contents(B() As Byte) pb.Contents = B() UserID = pb.ReadProperty("UserID") UserName = pb.ReadProperty("UserName") Password = pb.ReadProperty("Password") End Property Public Function Save() Dim FF As Long, B() As Byte, Obj As clsUser FF = FreeFile Open strData For Binary Access Write As #FF For Each Obj In Users B() = Obj.Contents Put #FF, , CLng(Len(B)) Put #FF, , B() Next Close #FF End Function og sa bare modifisere Open koden... Men tusen takk for hjelpen.. veldig laere rikt... [EDIT] jeg har litt problemer med og sette contents i PropertyBag'en.. Public Function SetContents(bContents As Byte, lLenght As Long) On Error Resume Next ReDim b(lLenght) As Byte CopyMemory bContents, b(0), lLenght Debug.Print UBound(b) pb.Contents = b() UserID = pb.ReadProperty("UserID") UserName = pb.ReadProperty("UserName") Password = pb.ReadProperty("Password") End Function Jeg far feil melding pa "pb.Contents = b()" Invalid procedure call or argument (Error 5) Endret 28. oktober 2005 av Richard87 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå