Storing collections in property bags
From HashVB
| This article is currently work in progress. Please come back later. |
This is a very brief sample of how to store collections of objects in a property bag. This is most of use in custom controls.
In the control itself:
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
Set IntTabs = PropBag.ReadProperty("Tabs", IntTabs)
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
PropBag.WriteProperty "Tabs", IntTabs
End Sub
Seeing as I create wrapper classes for my collections, heres what the wrapper does when told to "store" itself:
Private Sub Class_ReadProperties(PropBag As PropertyBag)
Dim Count As Long
Dim Index As Long
Dim NewTab As CCTabStrip.Tab
Count = PropBag.ReadProperty("TabCount", 0)
For Index = 1 To Count
Set NewTab = PropBag.ReadProperty("Tab" & CStr(Index))
IntTabs.Add NewTab
Next
End Sub
Private Sub Class_WriteProperties(PropBag As PropertyBag)
Dim Index As Long
PropBag.WriteProperty "TabCount", IntTabs.Count
For Index = 1 To IntTabs.Count
PropBag.WriteProperty "Tab" & CStr(Index), IntTabs(Index)
Next
End Sub
I can then rely on each Tab object to write out its own stuff:
Private Sub Class_ReadProperties(PropBag As PropertyBag)
Caption = PropBag.ReadProperty("Caption", "")
Set Image = PropBag.ReadProperty("Image", Nothing)
End Sub
Private Sub Class_WriteProperties(PropBag As PropertyBag)
PropBag.WriteProperty "Caption", Caption
PropBag.WriteProperty "Image", Image
End Sub
Another approach is to write each property of all the sub classes in the control. Unfortunately, this leads to hideous naming schemes. Using the method described above, each object is self contained.
When this propertybag is finally stored in your form file, it will appear as:
Begin CCTabStrip.TabStrip TabStrip1
Height = 2055
Left = 240
TabIndex = 3
Top = 240
Width = 4095
_ExtentX = 7223
_ExtentY = 3625
BeginProperty Tabs {14A86EAB-1F15-4CAF-8047-A847E3230E70}
TabCount = 2
BeginProperty Tab1 {C9FCBE2F-471D-4B4F-8A37-9332B4FC63E5}
Caption = "Tab strip"
EndProperty
BeginProperty Tab2 {C9FCBE2F-471D-4B4F-8A37-9332B4FC63E5}
Caption = "New tab"
EndProperty
EndProperty
End