PropertyBag question

Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 - 22 avril 2010 à 23:42
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 23 avril 2010 à 08:21
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

Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
23 avril 2010 à 00:12
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 avril 2010 à 07:05
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]
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 avril 2010 à 07:14
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
0
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
23 avril 2010 à 08:08
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 avril 2010 à 08:21
utile si la valeur fournie est inaccessible, j'imagine (null ou autre)

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