|
Leider ist dem PropertyBag-Objekt, das im ReadProperties-Ereignis eines UserControls übergeben wird, nur eine recht kurze Lebensdauer beschieden. Jeder Versuch, eine Referenz darauf in einer privaten Variablen im UserControl abzulegen und später darauf zuzugreifen, scheitert: Visual Basic hat das PropertyBag-Objekt schon längst wieder vernichtet. Sie werden nicht umhin kommen, den übergebenen Inhalt des PropertyBags selbst zwischenzuspeichern.
Dazu könnten Sie jede Menge an zusätzlichen privaten Variablen im UserControl anlegen, um dort den Ursprungswert jeder Eigenschaft einzeln für sich abzulegen. Sie könnten auch eine Collection verwenden, oder ein selbst instanziertes PropertyBag-Objekt (ab VB 6), um die Werte unter Schlüsseln darin abzulegen. Ab einer gewissen Anzahl von Eigenschaften wäre allerdings recht müßig, die Werte sowohl aus dem in ReadProperties übergebenen PropertyBag auszulesen als auch in einen anderen Speicher zu übertragen.
Einfacher ist es, gleich von vornherein den ganzen Speicher im in WriteProperties übergebenen PropertyBag abzulegen, und diesen in ReadProperties wieder auszulesen und anschließend so zu behandeln, als ob es das von VB gelieferte PropertyBag wäre.
Private mPropBag As PropertyBag
Private pMyProperty
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Dim nPropBag As PropertyBag
Set nPropBag = New PropertyBag
nPropBag.WriteProperty "MyProperty", pMyProperty
PropBag.WriteProperty "Contents", nPropBag.Contents
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
If mPropBag Is Nothing Then
Set mPropBag = New PropertyBag
mPropBag.Contents = PropBag.ReadProperty("Contents")
UserControl_ReadProperties mPropBag
Else
pMyProperty = PropBag.ReadProperty("MyProperty")
End If
End Sub
Zur Laufzeit können Sie die ursprünglichen Werte des PropertyBags, das sich ja nun in mPropBag befindet, jederzeit einzeln oder auch komplett wieder auslesen und somit die Anfangseinstellungen wieder herstellen - beispielsweise durch einen Klick auf das UserControl:
Private Sub UserControl_Click()
UserControl_ReadProperties mPropBag
End Sub
|