Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB 5/6 0110: Verwendung des PropertyBag-Objekts

 von 

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.

Zurück zur Übersicht

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

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [2,76 KB]

' 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.