HINWEIS
Damit die Eigenschaft nicht nur geschrieben, sondern auch gelesen werden kann, fügen Sie zur
Property Let-
Prozedur eine gleichnamige
Property Get
-Funktion hinzu:
Static Property Get farbe() As Long
farbe = Befehl0.ForeColor
End Property
Eigenständige Klassenmodule
Eigenständige Klassenmodule sind nicht an ein bestimmtes Formular bzw. einen Bericht gekoppelt und
eignen sich deshalb als Vorlage für beliebige nutzerdefinierte Objekte.
Erstellen eines Klassenmoduls
Nach Aufruf des Menübefehls Einfügen/Klassenmodul öffnet sich ein Codefenster, welches sich bis auf die
Titelleiste nicht von einem gewöhnlichen Standardmodul unterscheidet.
Abbildung 5.4 Erzeugen eines Klassenmoduls im Visual Basic-Editor
Alternativ kann man ein leeres Klassenmodul auch von außerhalb des Visual Basic-Editors aus erzeugen.
Wählen Sie dazu das entsprechende Symbol von der Registerkarte »Andere« (Hauptregisterkarte »Erstellen«) der Multifunk-
tionsleiste (siehe folgende Abbildung).
Abbildung 5.5 Erzeugen eines Klassenmoduls unter Benutzung der
Multifunktionsleiste
Nach erfolgter Definition von Eigenschaften und Methoden wird das Klassenmodul mit seinem Klassen-
namen (standardmäßig Klasse1, Klasse2 etc.) abgespeichert und taucht im Navigationsbereich unter
»Module« in trauter Gemeinsamkeit mit den »gewöhnlichen« Standardmoduls auf (siehe Abbildung 5.6).
249
Formular- und Berichtsmodule
HINWEIS
BEISPIEL
Kapitel 5: Programmieren mit Objekten
Abbildung 5.6 Eine Klasse im Navigationsbereich
Wenn Sie etwas genauer hinschauen, können Sie ein Klassenmodul auch anhand seines Symbols klar von
einem Standardmodul unterscheiden.
Um nochmals auf die Begriffe einzugehen:
Ein »Klassenmodul« definiert eine »Klasse«. Mit völlig gleichwertiger Bedeutung wird eine Klasse mit-
unter auch als »Objekttyp« bezeichnet.
Ein »Objekt« entsteht erst, wenn eine »Instanz« der Klasse gebildet wird. »Objekt« und »Objektvariable«
sind austauschbare Begriffe.
Eigenschaften und Methoden definieren
Die prinzipielle Vorgehensweise unterscheidet sich nicht von der Erstellung benutzerdefinierter Eigenschaf-
ten und Methoden von Formular- und Berichtsmodulen. Alle öffentlichen Prozeduren des Klassenmoduls
werden zu benutzerdefinierten Methoden, und alle öffentlichen Property Let-, Property Get- und Property
Set-Prozeduren werden zu Objekt-Eigenschaften.
Ein Klassenmodul
CKreis
hat die Eigenschaften
radius
und
umfang
(letztere kann nur gelesen werden) und
die Methode
zeichneMich
(kann nur von Reports genutzt werden, weil nur diese über Grafikmethoden ver-
fügen).
Const Pi = 3.1416
Public radius As Double ' Radius-Eigenschaft
Property Get umfang() As Double ' Umfang lesen
umfang = 2 * Pi * radius
End Property
Sub zeichneMich(rep As Report, x As Integer, y As Integer)
rep.Circle (rep.x, rep.y, radius)
End Sub
Erzeugen von Objekten (Instanzenbildung)
Im Unterschied zu Formular- und Berichtsmodulen (diese haben jeweils eine Standardinstanz) existiert mit
dem Erstellen eines eigenständigen Klassenmoduls noch keine Instanz (sprich Objekt) der Klasse. Eine
solche muss erst noch gebildet werden (es können auch mehrere sein). Dies geschieht im Allgemeinen erst
in anderen Codemodulen, die die Klasse benutzen. Auch hier haben wir es wieder mit den zwei Möglich-
keiten der Instanzierung (Early Binding) zu tun:
250
BEISPIEL
BEISPIEL
Entweder die »Quick and Dirty«-Methode
1
:
Dim ObjVarName As New ObjectType
oder die »saubere« Variante:
Dim ObjVarName As ObjectType
...
Set ObjVarName As New ObjectType
In einem Berichtsmodul wird eine Instanz des im Vorgängerbeispiel definierten Objekttyps
CKreis
gebildet.
Der Objektvariablen
krs
wird der Radius 1000 (
Twips
) zugewiesen. Die Variable
u
liest den Kreisumfang.
Schließlich wird der Kreis mit den Mittelpunktskoordinaten
x = 2000
,
y = 1500
auf dem Bericht gezeichnet.
Dim krs As New CKreis
Dim u As Double
krs.radius = 1000
u = krs.umfang
Call krs.zeichneMich(Me, 2000, 1500)
Den vollständigen Code finden Sie im Praxisbeispiel »Mit einer eigenständigen Klasse experimentieren«
(Seite 282).
WithEvents-Deklaration
Wenn Sie eine Objektvariable deklarieren wollen, die auf Ereignisse reagieren kann, so müssen Sie nach
Dim bzw. Public das Schlüsselwort WithEvents einfügen:
Dim WithEvents ObjVarName As ObjectType
Allerdings ist eine derartige Deklaration nur in eigenständigen Klassenmodulen möglich, auch können Sie
WithEvents nie zusammen mit New verwenden.
Eine Objektvariable
eventRefs
wird als Verweis-Auflistung in einem Klassenmodul deklariert. Jedes Mal, wenn
ein neuer Verweis hinzugefügt wird, erscheint ein Meldungsfenster.
Public WithEvents eventRefs As References
Private Sub eventRefs_ItemAdded(ByVal ref As Access.Reference)
MsgBox "Verweis auf " & ref.Name & " wurde hinzugefügt!"
End Sub
1
... von der auch die Autoren reichlich Gebrauch machen.
251
Formular- und Berichtsmodule

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.