Barvna shema: Temna
Trenutno dejavna stran: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Ereignisprozeduren für ein Steuerelement anlegen

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):

SteuerelementDesignerseite Ereignisse (EventProcedures)Objekt- und Prozedurliste des Codefensters
WklTreeView, WklTreeList, WklGantt, WklGrid, WklPropertyGridJaJa
WklSplitter, WklDockLayout, WklStatusLabel, WklNavBar, WklButton, WklValidator, WklToggleSwitch, WklTokenBox, WklBadgeNeinJa
WklToast, WklLinkManager (Objekte, keine Steuerelemente)NeinNur 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):

  1. Markieren Sie das Steuerelement in der Entwurfsansicht; Eigenschaftenblatt, Registerkarte Andere.
  2. Klicken Sie in der Zeile EventProcedures auf [...]. Die Seite Ereignisse listet jedes Ereignis mit einer kurzen Beschreibung auf und kennzeichnet die Ereignisse, die bereits eine Prozedur haben.
  3. 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.
  4. 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 EventProcedures zeigt, 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.
  • NodeFormat und CellFormat treten nur mit FormatEvents = True ein (Fehlerbehebung).
  • 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 WklUpdateAction erfordert den Verweis auf WKL Forms Object Library (Extras › Verweise). Access setzt ihn, wenn das Steuerelement von Hand eingefügt wird; ein mit LoadFromText geladenes Formular setzt ihn nicht, und ohne ihn lässt sich auch die korrekte Deklaration nicht kompilieren. Long anstelle der Enumeration lässt sich mit und ohne Verweis kompilieren.
    • Ein Modul, das sich nicht kompilieren lässt, wird nirgends gemeldet: RunCommand acCmdCompileAndSaveAllModules löst keinen Fehler aus, und DoCmd.OpenForm, per Automatisierung aufgerufen, kehrt zurück, ohne das Formular zu öffnen. Prüfen Sie nach dem Kompilieren Application.IsCompiled. Die Designerseite und die Listen des Codefensters schreiben die Deklaration korrekt.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/create-event-procedures.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille