Ereignisprozeduren für ein Steuerelement anlegen
Behandeln Sie ein Ereignis eines WKL-Steuerelements im Formularmodul, etwa NodeSelect von WklTreeView,
ValidateCell von WklGrid oder Click von WklButton.
Voraussetzungen: WKL Forms Object Library 1.23 oder höher.
Lösungsüberblick
Access listet die Ereignisse eines ActiveX-Steuerelements nie auf der Registerkarte Ereignis des
Eigenschaftenblatts auf. Ereignisprozeduren legen Sie über die Objekt- und Prozedurliste des Codefensters an – für jedes
WKL-Steuerelement – oder, bei den Steuerelementen der Struktur- und Rasterfamilie, auch über die Designerseite
Ereignisse (Zeile EventProcedures im Eigenschaftenblatt):
| Steuerelement | Designerseite Ereignisse (EventProcedures) | Objekt- und Prozedurliste des Codefensters |
|---|---|---|
WklTreeView, WklTreeList, WklGantt, WklGrid, WklPropertyGrid | Ja | Ja |
WklSplitter, WklDockLayout, WklStatusLabel, WklNavBar, WklButton, WklValidator, WklToggleSwitch, WklTokenBox, WklBadge | Nein | Ja |
WklToast, WklLinkManager (Objekte, keine Steuerelemente) | Nein | Nur für eine WithEvents-Variable am Anfang eines Klassen- oder Formularmoduls |
Das Formular braucht ein Modul (Enthält Modul = Ja); ein Formular ohne Modul erhält von keinem Steuerelement Ereignisse.
Umsetzung
Über den Designer (Struktur- und Rasterfamilie):
- Markieren Sie das Steuerelement in der Entwurfsansicht; Eigenschaftenblatt, Registerkarte Andere.
- Klicken Sie in der Zeile
EventProceduresauf[...]. Die Seite Ereignisse listet jedes Ereignis mit einer kurzen Beschreibung auf und kennzeichnet die Ereignisse, die bereits eine Prozedur haben. - Wählen Sie das Ereignis aus (das Suchfeld oben filtert die Liste), und klicken Sie auf Prozedur anlegen / öffnen, oder doppelklicken Sie auf das Ereignis.
- Schließen Sie die Seite mit OK. Access legt die Prozedur an und öffnet das Codefenster an dieser Stelle.
Über das Codefenster (jedes Steuerelement): Öffnen Sie das Formularmodul (Code anzeigen), wählen Sie in der
Objektliste das Steuerelement (zum Beispiel Tree1) und in der Prozedurliste das Ereignis. Für ein Objekt wie
WklToast deklarieren Sie zuerst die Variable auf Modulebene; danach erscheint sie in der Objektliste:
Private WithEvents mToast As WklToast ' at the top of the module, not inside a procedure
Private Sub Form_Load()
Set mToast = New WklToast
End Sub
Das Ergebnis hat die Signatur aus der Typbibliothek:
Private Sub Tree1_NodeDrop(ByVal SourceKey As Variant, ByVal TargetKey As Variant, _
ByVal Position As WklDropPosition, ByVal Effect As WklDropEffect, Cancel As Integer)
If MsgBox("Diesen Knoten verschieben?", vbYesNo) = vbNo Then Cancel = True
End Sub
Hinweise
- Die Prozedur wird erst nach OK angelegt; Abbrechen verwirft die Anforderung. Solange der Eigenschaftenrahmen geöffnet ist, lässt sich Access nicht zurückrufen.
- Die Zeile
EventProcedureszeigt, wie viele Ereignisse eine Prozedur haben; Eingaben in diese Zeile bleiben wirkungslos. - Ereignisse melden Benutzeraktionen; dieselben Vorgänge, aus dem Code aufgerufen, lösen keine Ereignisse aus.
- Eine von Hand geschriebene Prozedur muss die Parameter des Ereignisses so haben, wie die API-Referenz sie aufführt, in Anzahl und Reihenfolge, zum Beispiel
treMain_BeforeUpdate(ByVal Key As Variant, ByVal Action As WklUpdateAction, Cancel As Integer). Andernfalls:- Eine Deklaration mit einer anderen Anzahl von Parametern –
BeforeUpdate(ByVal Action As Long)– verhindert, dass sich das gesamte Formularmodul kompilieren lässt, mit und ohne Verweis auf die Typbibliothek. - Ein Enumerationstyp wie
WklUpdateActionerfordert den Verweis auf WKL Forms Object Library (Extras › Verweise). Access setzt ihn, wenn das Steuerelement von Hand eingefügt wird; ein mitLoadFromTextgeladenes Formular setzt ihn nicht, und ohne ihn lässt sich auch die korrekte Deklaration nicht kompilieren.Longanstelle der Enumeration lässt sich mit und ohne Verweis kompilieren. - Ein Modul, das sich nicht kompilieren lässt, wird nirgends gemeldet:
RunCommand acCmdCompileAndSaveAllModuleslöst keinen Fehler aus, undDoCmd.OpenForm, per Automatisierung aufgerufen, kehrt zurück, ohne das Formular zu öffnen. Prüfen Sie nach dem KompilierenApplication.IsCompiled. Die Designerseite und die Listen des Codefensters schreiben die Deklaration korrekt.
Verwandte Themen
- Die Ereignisse jedes Steuerelements: Abschnitt „Events“ seiner Seite in der API-Referenz (Englisch)