|
Entgegen der Überschrift zu diesem Artikel haben solche Aktions-Eigenschaften natürlich ihren Wert, auch wenn sie keinen Wert im Sinne einer Eigenschaft haben. Ach so, der Begriff "Aktions-Eigenschaft" ist Ihnen völlig unbekannt? Zugegeben - mir war er auch unbekannt - bis ich ihn und dazu diese Aktions-Eigenschaften "erfunden" habe.
Wie der Begriff schon aussagt, geht es um Aktionen, die über eine Eigenschaft ausgelöst werden soll. Zur Laufzeit ist das kein Problem - zum Anstoßen von Aktionen, die ein Objekt, also etwa eine Klasse oder ein UserControl, ausführen soll, verwenden Sie ja gewöhnlich Methoden. Doch zur Entwicklungszeit können Sie Methoden noch nicht aufrufen, insbesondere nicht bei einem UserControl.
Es wäre doch ganz praktisch, wenn man über das Eigenschaften-Fenster irgendwelche Aktionen einfach per Doppelklick auf eine Eigenschaft ausführen könnte. So könnte beispielsweise ein UserControl zu Gestaltungszwecken in die linke obere Ecke seines Containers springen und diesen flächendeckend ausfüllen und dergleichen mehr. Dabei ist nicht unbedingt ein bestimmter Eigenschaften-Wert notwendig, der später zur Laufzeit irgendeine Relevanz hätte.
Der Trick ist eigentlich simpel: Die Aktion wird in einer Property Let-Prozedur einer Eigenschaft des Datentyps Boolean ausgeführt. Die zugehörige Property Get-Prozedur bleibt einfach leer - sie wird nur benötigt, damit diese Eigenschaft im Eigenschaften-Fenster überhaupt angezeigt wird.
Public Property Get Action() As Boolean
'
End Property
Public Property Let Action(New_Action As Boolean)
MsgBox "Aktion!"
End Property
Der Wert der Eigenschaft bleibt immer False - er ist hier vollkommen uninteressant. Es genügt, wie gesagt, ein Doppelklick auf die Eigenschaft im Eigenschaften-Fenster, damit die Property Let-Prozedur aufgerufen wird.
Da hier auch nichts zu speichern ist, erübrigt sich auch der Aufruf von PropertyChanged, wie auch die Berücksichtigung dieser Eigenschaft in UserControl_ReadProperties und UserControl_WriteProperties.
Wenn Sie nun das angeführte Beispiel aufgreifen möchten, könnte die Property-Let-Prozedur etwa so aussehen:
Public Property Let Action(New_Action As Boolean)
Dim nScaleWidth As Single
With Extender.Container
On Error Resume Next
nScaleWidth = .ScaleWidth
If Err.Number Then
MsgBox _
"Container verfügt nicht über eine ScaleWidth-Eigenschaft!"
Else
Extender.Move 0, 0, nScaleWidth, .ScaleHeight
End If
End With
End Property
|