Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB4, VB5, VB6 | 16.11.01 |
Einstellungen verwalten mit dem PropertyBag-Objekt Eine weitere, eher unbekannte Methode zum Lesen und Speichern von Anwendungs-Einstellungen bietet das PropertyBag-Objekt. | ||
Autor: Dieter Otter | Bewertung: | Views: 28.425 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie speichern Sie eigentlich Anwender-Einstellungen, die der User z.B. in einem "Einstellung-Dialog" vorgenommen hat?
Hmmm... Klar - in INI-Dateien... oder auch in der Registry.
Warum eigentlich nicht mit Hilfe des PropertyBag-Objekts?
Hmmm... auch Klar - weil dieses viele VB-Progger gar nicht kennen. Und wenn doch, dann nur in Verbindung mit UserControls, bei denen man das PropertyBag-Objekt ja von Haus aus zum Speichern und Wiederherstellen von Einstellungen verwenden muss.
Warum das PropertyBag-Objekt also nicht auch für ganz normale Einstellungen verwenden?
Das "schöne" am PropertyBag-Objekt ist, dass sich beliebige Datentypen speichern lassen - also z.B. auch Bilder. Haben Sie mal versucht die Picture-Eigenschaft eines Image- oder PictureBox-Controls in einer INI-Datei oder in der Registry zu speichern? Mit dem PropertyBag-Objekt ist dies ohne Probleme möglich. Alle Einstellungen werden in einer einzigen Datei gespeichert - und können aus dieser auch wieder gelesen werden. Sie brauchen sich auch nicht darum zu kümmern, an welcher Position in der Datei, welche Einstellung steht - das alles erledigt das PropertyBag-Objekt für Sie.
Nun aber (endlich) zur praktischen Anwendung des PropertyBag-Objekts.
Speichern von Einstellungen
' Speichern Private Sub Properties_Save() Dim F As Integer ' Neues PropertyBag-Objekt erstellen Dim myPropBag As New PropertyBag ' Einstellungen zunächst im PropertyBag-Objekt speichern With myPropBag .WriteProperty "UserName", txtUserName.Text, "" .WriteProperty "UserID", Val(txtUserID.Text), 0 .WriteProperty "UserPic", picUser.Picture, Nothing End With ' Jetzt den Inhalt des PropertyBags speichern ' Falls die Datei existiert - vorher löschen! If Dir$(App.Path & "\user.dat", vbNormal) <> "" Then _ Kill App.Path & "\user.dat" F = FreeFile Open App.Path & "\user.dat" For Binary As #F Put #F, , myPropBag.Contents Close #F End Sub
Wie Sie am obigen Code sehen, wird über die WriteProperty-Methode eine Einstellung im PropertyBag-Objekt gespeichert. Der erste Parameter bestimmte den Namen, über den Sie dann später die Einstellung wieder den Controls oder Variablen zuweisen können. Der zweite Parameter legt den zu speichernden Inhalt fest. Hierbei kann es sich um einen beliebigen Datentyp handeln. Der dritte Parameter ist optional und legt den Default-Wert (Standard-Wert) der Einstellung fest. Die Angabe ist dahingehend nützlich, dass die Einstellung nur dann gespeichert wird, wenn Sie vom Default-Wert abweicht. Ist das PropertyBag mit allen Daten gefüllt, so kann dieses über seine Contents-Eigenschaft in eine Datei gespeichert werden. Aber Achtung! Die Datei muss im binären Format geöffnet werden, da ein späteres Einlesen sonst zu einem Laufzeitfehler führt!
Lesen der Einstellung
' Lesen Private Sub Properties_Load() Dim F As Integer Dim vInhalt As Variant ' Neues PropertyBag-Objekt erstellen Dim myPropBag As New PropertyBag ' Datei-Inhalt einlesen If Dir$(App.Path & "\user.dat", vbNormal) <> "" Then F = FreeFile Open App.Path & "\user.dat" For Binary As #F Get #F, , vInhalt Close #F ' Inhalt dem PropertyBag-Objekt zuweisen myPropBag.Contents = vInhalt ' Einstellungen den Controls zuweisen With myPropBag txtUserName.Text = .ReadProperty("UserName", "") txtUserID.Text = CStr(.ReadProperty("UserID", 0)) Set picUser.Picture = .ReadProperty("UserPic", Nothing) End With End If End Sub
Fazit:Das PropertyBag-Control eignet sich hervorragend, um Anwender- oder Anwendungseinstellungen zu speichern - vor allem, wenn es sich um Einstellungen verschiedener Datentypen handelt (wie Bilder, oder ähnliches).