Tipp-Upload: VB 5/6 0110: Verwendung des PropertyBag-Objekts
von Henrik Ilgen
Hinweis zum Tippvorschlag
Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Sonstiges
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
PropertyBag
Damit er übernommen werden kann, müssen noch Änderungen daran vorgenommen werden. Sofern Sie der Autor sind, können Sie sich anmelden, um die Liste einzusehen.
Der Vorschlag wurde erstellt am: 20.09.2007 18:07.
Die letzte Aktualisierung erfolgte am 20.09.2007 18:32.
Beschreibung
Manchmal kommt man in die Situation, dass man Daten nicht einfach speichern kann, ohne dass sie durcheinander gewirbelt werden. Trennt man diese bspw. mit einem Trennzeichen, das möglicherweise auch in den Werten auftaucht, hat man plötzlich zu viele Werte.
Dieser Umstand lässt sich mit dem PropertyBag-Objekt umgehen, da das PropertyBag-Objekt darauf ausgelegt ist, genau das zu tun: Werte zu speichern.
Leider ist die Bedienung manchmal unnötig kompliziert, dieser Tipp zeigt deshalb, wie es richtig geht.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ------------ Anfang Projektdatei PBExample.vbp ------------ ' --- Anfang Formular "frmPBExample" alias frmPBExample.frm --- ' Steuerelement: Beschriftungsfeld "Label1" ' Steuerelement: Linien-Steuerelement "Line2" ' Steuerelement: Beschriftungsfeld "Label4" ' Steuerelement: Beschriftungsfeld "Label3" ' Steuerelement: Listen-Steuerelement "lstAusgabe" ' Steuerelement: Linien-Steuerelement "Line1" ' Steuerelement: Schaltfläche "cmdWertlöschen" ' Steuerelement: Beschriftungsfeld "Label2" ' Steuerelement: Schaltfläche "cmdWerteAuslesen" ' Steuerelement: Listen-Steuerelement "lstEingabe" ' Steuerelement: Textfeld "txtInhalt" ' Steuerelement: Schaltfläche "cmdWertHinzufügen" ' Steuerelement: Beschriftungsfeld "Label5" Option Explicit Private MeinePropertyBag As PropertyBag ' Die PropertyBag, die verwendet wird Private PBCString As String ' Der Inhalt der PropertyBag Private Sub cmdWerteAuslesen_Click() Dim i As Long ' Um alle Werte in der PropertyBag durchzugehen Dim ByteArray() As Byte ' Wird benötigt, da die PropertyBag keine Strings annimmt ' lstAusgabe löschen Call lstAusgabe.Clear ' PropertyBag löschen Set MeinePropertyBag = New PropertyBag ' String in ein ByteArray konvertieren ByteArray = StrConv(PBCString, vbFromUnicode) ' ByteArray an die Contents-Eigenschaft der PropertyBag übergeben MeinePropertyBag.Contents = ByteArray ' Sind überhaupt Werte vorhanden? If MeinePropertyBag.ReadProperty("AnzahlWerte") = 0 Then Call lstAusgabe.AddItem("Keine Werte vorhanden!") Exit Sub End If ' Einen Wert nach dem anderen ausgeben For i = 0 To MeinePropertyBag.ReadProperty("AnzahlWerte") - 1 Call lstAusgabe.AddItem(MeinePropertyBag.ReadProperty("Wert" & CStr(i))) Next i End Sub Private Sub cmdWertHinzufügen_Click() Dim Eingabe As String ' Wert eingeben lassen Eingabe = InputBox("Bitte den neuen Wert eingeben:", "Werteingabe") ' Nur, wenn ein Wert eingegeben wurde, diesen hinzufügen If Eingabe <> "" Then Call lstEingabe.AddItem(Eingabe) End If ' Aktualisieren Call Aktualisieren End Sub Private Sub cmdWertlöschen_Click() ' Überprüfen, ob ein Wert ausgewählt ist If lstEingabe.ListIndex = -1 Then Exit Sub ' Den gewählten Wert löschen Call lstEingabe.RemoveItem(lstEingabe.ListIndex) ' Aktualisieren Call Aktualisieren End Sub Private Sub Form_Load() ' Standard-Werte hinzufügen Call lstEingabe.AddItem("Ein Wert") Call lstEingabe.AddItem("Noch ein Wert") Call lstEingabe.AddItem("Wert Nr. 3") Call lstEingabe.AddItem("Wert Nr. 4") ' Anzeige aktualisieren Call Aktualisieren End Sub Private Sub Aktualisieren() Dim i As Long ' Um alle Werte in der ListBox durchzugehen ' PropertyBag löschen Set MeinePropertyBag = New PropertyBag ' Anzahl der Werte schreiben Call MeinePropertyBag.WriteProperty("AnzahlWerte", lstEingabe.ListCount) ' Alle Werte durchlaufen For i = 0 To lstEingabe.ListCount - 1 ' Wert in die PropertyBag schreiben Call MeinePropertyBag.WriteProperty("Wert" & CStr(i), lstEingabe.List(i)) Next i ' Inhalt der PropertyBag in PBCString kopieren ' Hier hilft uns StrConv(), mit dieser Funktion konvertieren wir ' das ByteArray aus der Contents-Eigenschaft in einen String. ' Ansonsten würde eine implizite Konvertierung angestellt, ' was man aber nach Möglichkeit vermeiden sollte. ' Der Preis dafür, dass wir keine implizite Konvertierung haben, ' ist, dass wir jedes Mal, wenn wir etwas mit dem Inhalt machen ' wollen, diesen wieder zurückkonvertieren müssen. PBCString = StrConv(MeinePropertyBag.Contents, vbUnicode) ' Inhalt der PropertyBag anzeigen ' vbNullChar-Zeichen werden als Ende des Strings interpretiert, deswegen ' werden diese entfernt und durch Leerzeichen ersetzt... ' Dies dient lediglich der Anzeige und sollte nicht übernommen werden. ' Hier wird die Konvertierung nach Unicode wieder rückgängig gemacht, ' damit der Text nicht zu breit dargestellt wird. txtInhalt.Text = Replace(StrConv(PBCString, vbFromUnicode), vbNullChar, " ") End Sub ' --- Ende Formular "frmPBExample" alias frmPBExample.frm --- ' ------------- Ende Projektdatei PBExample.vbp -------------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.