PropertyBag question

Signaler
Messages postés
300
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
-
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Bonjour,
Je n'arrive pas a comprendre ce qui ne va pas dans le code suivant :
Placé dans un bouton sur une Form1

    Dim A As PropertyBag
    Set A = New PropertyBag
    Call A.WriteProperty("A", "1", 1)
    Debug.Print A.ReadProperty("A", -1)

    Dim b As PropertyBag
    Set b = New PropertyBag
        b.WriteProperty "B", "1", 1
    Debug.Print b.ReadProperty("B", -1)


Il se trouve que ca affiche
-1
-1




En gros, même apres avoir écrit dans le propertybag celui-ci est vide.
Une raison valable à cela ?

L'idée serait ensuite de comparer les contents des deux propertybag et savoir si ils sont identiques.

VB6, quand yen a plus yen a encore
Il y a tant a apprendre et seulement 24 heures dans une journée

5 réponses

Messages postés
300
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
Mmmm encore + fort

le code suivant marche :
Dim P As New PropertyBag
    P.WriteProperty "A", "2", 1        
    Debug.Print P.ReadProperty("A", -1)
résultat : "2"

le code suivant ne marche pas :
Dim P As New PropertyBag
    P.WriteProperty "A", "1", 1         
    Debug.Print P.ReadProperty("A", -1)
résultat "-1"

le code suivant marche :
Dim P As New PropertyBag
    P.WriteProperty "A", "1", "_"        
    Debug.Print P.ReadProperty("A", -1)
résultat : "1"


on aurait donc pas le droit d'écrire
"A" , valeur "1" défaut valeur "1" ? >_<

VB6, quand yen a plus yen a encore
Il y a tant a apprendre et seulement 24 heures dans une journée
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
salut,

il ne faut pas lire/écrire UN propertybag, mais uniquement dans celui du usercontrol. pour çà il faut se fier aux évènements adéquats, à savoir initproperties, readproperties, writeproperties

les 2 derniers ayant le propbag en paramètre

++
[hr]
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
ne met pas de DefaultValue au WriteProperty, ca n'a pas de sens

la seule logique que j'y trouve, en regardant rapidement, c'est en fait que si lq valeur Ecrite est identique a la valeur par defaut, il ne la stocke pas...

du coup, a la lecture tu retombes sur la valeur par defaut spécifiée a ce moment la.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
300
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
Bonjour, merci de vos réponses
"il ne faut pas lire/écrire UN propertybag, mais uniquement dans celui du usercontrol"
il y a pourtant des sources (VB6) qui présentent l'utilisation de propertyBag pour faire par exemple un fichier de config (voir même compressible)
ou encore pour stoquer des objets (g bien dit objet) dans une base de donnée...
le problème c'est que je ne suis pas dans un usercontrol mais dans un module de classe. Je souhaite sérialiser/dé-sérialiser une classe a travers UN propertyBag
Comme ça :
Public Sub Serialize(PB as propertyBag)
     PB.writeproperty "Prop1", prop1
     PB.writeproperty "Prop2", prop2
     ...
End sub
Public Sub UnSerialize(PB as propertyBag)
     prop1 = PB.readproperty "Prop1", prop1
     prop2 = PB.readproperty "Prop2", prop2
     ...
End sub

Public Sub Cloner(src as cMaClasse)
     Dim PB as new propertyBag
          src.serialize PB
          me.unserialize PB
     set PB = nothing
End sub

Public property Equal(src as cMaClasse) as boolean
     Dim PB as propertyBag
     Dim Serial1 as string
     Dim Serial2 as string

    Set PB = new PropertyBag
          src.serialize PB
          Serial1 = Cstr(PB.Contents)
    Set PB = new PropertyBag
          Me.Serialize PB
          serial2 = Cstr(PB.COntents)

    Equal Cbool(serial1 serial2)
End sub



"ne met pas de DefaultValue au WriteProperty, ca n'a pas de sens "
En effet, je suis bien d'accord. Néamoins on est en droit de se demander le sens de l'existance de ce paramètre dans la fonction. Est-ce bien une valeur par défaut ?
Je n'ai rien trouvé dans msdn qui me donne une réponse à ce sujet.
Deplus, comme le montrent les exemple de mon précédent poste, il semblerait que cette valeur ait bien une influence sur la réussite ou non de l'écriture dans le propertyBag.


VB6, quand yen a plus yen a encore
Il y a tant a apprendre et seulement 24 heures dans une journée
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
utile si la valeur fournie est inaccessible, j'imagine (null ou autre)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp