|
Der originalen Tag-Eigenschaft
von Steuerelementen in Visual Basic können Sie nur Strings oder in
Strings konvertierte numerische Werte zuweisen. Ihre eigenen, auf
der Basis von UserControls erstellten Steuerlementen können Sie
dagegen mit einer TagVariant-Eigenschaft versehen, die - wie ihr
Name schon besagt - beliebige Variant-Werte aufnehmen kann. Auch
Ihre Forms und ebenso Ihre Klassen können Sie mit einer solchen
TagVariant-Eigenschaft ausrüsten.
In der Property Get-Prozedur müssen Sie prüfen, ob die lokale
Variable pTagVariant ein Objekt enthält und dementsprechend den
Rückgabewert mittels der Set-Anweisung zuweisen.
Private pTagVariant As Variant
Public Property Get TagVariant() As Variant
If IsObject(pTagVariant) Then
Set TagVariant = pTagVariant
Else
TagVariant = pTagVariant
End If
End Property
Da Sie über einen Variant-Datentyp auch ein Objekt zuweisen
können, sollten Sie zur Zuweisung sowohl eine Property Let- als
auch eine Property Set-Prozedur anlegen.
Public Property Let TagVariant(New_TagVariant As Variant)
pTagVariant = New_TagVariant
PropertyChanged "TagVariant"
End Property
Da sich der Datentyp des übergebenen Parameters bei der Property
Set-Prozedur von dem der Property Let-Prozedur unterscheiden darf,
sollten Sie den Parameter konsequenterweise als Object deklarieren:
Public Property Set TagVariant(New_TagVariant As Object)
Set pTagVariant = New_TagVariant
PropertyChanged "TagVariant"
End Property
Wenn Sie wollen, dass die Zuweisung eines Objekts auch ohne
Set-Anweisung erfolgen darf (wie etwa bei der Picture-Eigenschaft
bei VB-Steuerelementen), müssen Sie ähnlich wie in der Property
Get-Prozedur prüfen, ob ein Objekt vorliegt und dementsprechend die
Zuweisung an die lokale Variable pTagVariant vornehmen.
Public Property Let TagVariant(New_TagVariant As Variant)
If IsObject(New_TagVariant) Then
Set pTagVariant = New_TagVariant
Else
pTagVariant = New_TagVariant
End If
PropertyChanged "TagVariant"
End Property
Soll bei einem UserControl oder einer persistenten Klasse (ab VB
6) der Inhalt der TagVariant-Eigenschaft im PropertyBag gespeichert
werden, sind die entsprechenden Anweisungen in die ReadProperties-
und WriteProperties-Ereignisse aufzunehmen:
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
Me.TagVariant = PropBag.ReadProperty("TagVariant", vbEmpty)
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
PropBag.WriteProperty "TagVariant", pTagVariant, vbEmpty
End Sub
Als Standardwert wird hier vbEmpty verwendet. Damit Sie nicht
auch hier wieder die Prüfung auf ein Objekt hin einfügen müssen,
können Sie den aus dem PropertyBag ausgelesenen Wert über die
Property Let-Prozedur zuweisen (natürlich geht das nur, wenn Sie
die zweite Variante der Property Let-Prozedur verwendet haben).
Vergessen Sie nicht, die Zeile mit dem PropertyChanged-Aufruf in
die Property Let- und die Property Set-Prozedur einzufügen, damit
VB weiß, dass eine Änderung des Wertes der Eigenschaft gespeichert
werden soll.
|