Alle Ereignisse im Hauptformular

Wenn Sie mit Haupt- und Unterformularen arbeiten und Ereignisprozeduren sowohl in der Code behind-Klasse des Haupt- und des Unterformulars angelegt haben, kann es manchmal unübersichtlich werden. Das ist vor allem dann der Fall, wenn Ereignisse im Unterformular sich auf die Abläufe im Hauptformular auswirken. Dieser Artikel zeigt, wie Sie die Ereignisse, die durch ein Unterformular ausgelöst werden, im Klassenmodul des Hauptformulars implementieren. Damit können Sie Ereignisse, Objekte und Variablen in nur noch einem Modul nutzen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1704_EreignisseImHauptformular.accdb.

Beispielkonfiguration

In unserem Beispiel wollen wir die Einträge einer Tabelle namens tblArtikel in einem Unterformular anzeigen. Das Hauptformular soll Steuer-elemente zum Hinzufügen eines neuen Artikels, zum Löschen eines Artikels oder zum Bearbeiten eines bestehenden Artikels enthalten. Dazu ist es aus Gründen der Ergonomie notwendig, dass die Schaltflächen zum Anzeigen eines Datensatzes zum Bearbeiten und zum Löschen des aktuell markierten Datensatzes nur aktiviert sind, wenn der Benutzer auch einen Datensatz im Datenblatt markiert hat.

Das Unterformular versehen wir daher mit der Tabelle tblArtikel als Datenherkunft und ziehen alle Felder dieser Tabelle aus der Feldliste in den Detailbereich des Entwurfs. Außerdem stellen wir die Eigenschaft Standardansicht des Formulars auf Datenblatt ein (siehe Bild 1). Speichern Sie das Unterformular unter dem Namen sfmArtikeluebersicht und schließen Sie es. Dann legen Sie ein neues Formular namens frmArtikeluebersicht an und ziehen das Unterformular sfmArtikeluebersicht aus dem Navigationsbereich in den Detailbereich des neuen Formulars.

Entwurf des Unterformulars mit der Datenblattansicht

Bild 1: Entwurf des Unterformulars mit der Datenblattansicht

Außerdem fügen Sie noch drei Schaltflächen namens cmdNeu, cmdBearbeiten und cmdLoeschen zu diesem Hauptformular hinzu. Ordnen Sie die Steuer-elemente wie in Bild 2 an und stellen Sie außerdem die beiden Eigenschaften Horizontaler Anker und Vertikaler Anker des Unterformular-Steuerelements aus Beide ein. Für die unter diesem Steuer-element befindlichen Schaltflächen müssen Sie entsprechend Horizontaler Anker auf Unten einstellen, damit sich das Unterformular beim Vergrößern des Hauptformulars nicht über die Schaltflächen legt.

Haupt- und Unterformular in der Entwurfsansicht

Bild 2: Haupt- und Unterformular in der Entwurfsansicht

Da das Hauptformular selbst keine Daten anzeigt, können Sie dessen Eigenschaften Navigationsschaltflächen, Datensatzmarkierer, Trennlinien und Bildlaufleisten auf Nein einstellen sowie Automatisch zentrieren auf Ja.

Nun wollen wir dafür sorgen, dass die beiden Schaltflächen cmdBearbeiten und cmdLoeschen deaktiviert werden, wenn der Datensatzzeiger im Unterformular nicht auf einen Datensatz zeigt – also beispielsweise der neue Datensatz markiert ist wie in Bild 3.

Die beiden Schaltflächen cmdBearbeiten und cmdLoeschen sollen deaktiviert sein, wenn im Unterformular kein Datensatz markiert ist.

Bild 3: Die beiden Schaltflächen cmdBearbeiten und cmdLoeschen sollen deaktiviert sein, wenn im Unterformular kein Datensatz markiert ist.

Klassisch erledigen wir das wie folgt: Wir nutzen das Ereignis Beim Anzeigen des Unterformulars, indem wir die entsprechende Eigenschaft den Wert [Ereignisprozedur] auswählen und dann auf die Schaltfläche mit den drei Punkten rechts von der Eigenschaft klicken. Dann ergänzen wir die im VBA-Editor angelegte Ereignisprozedur wie in Listing 1. Das Ereignis wird jeweils beim Verschieben des Datensatzzeigers auf einen der Datensätze ausgelöst, auch beim Verschieben auf den leeren, neuen Datensatz.

Private Sub Form_Current()
     Me.Parent!cmdBearbeiten.Enabled = Not IsNull(Me!ArtikelID)
     Me.Parent!cmdLoeschen.Enabled = Not IsNull(Me!ArtikelID)
End Sub

Listing 1: Diese Prozedur aktiviert und deaktiviert die Schaltflächen.

In der Ereignisprozedur stellen wir die Eigenschaft Enabled der beiden Schaltflächen jeweils auf den Wert des Ausdrucks Not IsNull(Me!ArtikelID) ein. Me!Artikel hat immer einen Wert, wenn der Datensatzzeiger auf einen Datensatz zeigt, im Falle des leeren, neuen Datensatzes liefert dies jedoch den Wert Null. In diesem Fall werden die beiden Schaltflächen dann wie in der Abbildung deaktiviert. Beim Wechsel zu einem anderen Datensatz aktiviert die Ereignisprozedur die beiden Schaltflächen jedoch wieder.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar