Home > Artikel > Ausgabe 8/2012 > Die Umschaltfläche

Die Umschaltfläche

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Neben der normalen Schaltfläche fristet die Umschaltfläche bei den meisten Entwicklern das Dasein eines Stiefkindes. Oder sollte man eher sagen, neben dem Kontrollkästchen und der Optionsgruppe samt Optionsfeldern? Denn eigentlich ist die Aufgabe dieses Steuerelements eher die zur Auswahl einer von zwei oder mehr Optionen. Dazu gehört natürlich auch das An- oder Ausschalten bestimmter Zustände.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1208_Umschaltflaeche.mdb.

Umschaltfläche als Einzelgänger

Im einfachsten Fall verwenden Sie die Umschaltfläche als einfaches, ungebundenes Steuerelement. Ein Beispiel zeigt Bild 1. Die dortige Umschaltfläche im Formular frmToggleButton der Beispieldatenbank heißt schlicht tblAnAus. In diesem ersten Beispiel wollen wir uns zunächst ansehen, welche Werte die Umschaltfläche abhängig von ihrem Zustand annimmt.

Eine einfache Umschaltfläche

Bild 1: Eine einfache Umschaltfläche

Dazu geben Sie einfach im Direktfenster des VBA-Editors (Strg + G, am besten platzieren Sie beide Fenster nebeneinander) die folgende Anweisung ein:

  Forms!frmToggleButton!tglAnAus.Value

    Null

Dies war der Zustand direkt nach dem Öffnen des Formulars für eine ungebundene Umschaltfläche – die Eigenschaft Value liefert den Wert Null. Sie können die Angabe der Eigenschaft Value auch weglassen, da dies die Standardeigenschaft dieses Steuerelements ist. Klicken Sie nun einmalig auf die Umschaltfläche und führen die Abfrage für den gedrückten Status aus, sieht das Ergebnis so aus:

  Forms!frmToggleButton!tglAnAus

    -1

Der gedrückte Zustand liefert also den Wert -1 beziehungsweise True. Ein erneutes Anklicken liefert schließlich den Wert 0, also False.

Ereignisse der Umschaltfläche

Anschließend prüfen wir, wie wir auf das Anklicken der Umschaltfläche reagieren und den aktuellen Wert verarbeiten können. Ein Blick auf die Registerseite Ereignis des Eigenschaftsfensters liefert alle zur Verfügung stehenden Ereigniseigenschaften (siehe Bild 2). Davon sind drei interessant: Beim Klicken, Vor Aktualisierung und Nach Aktualisierung.

Ereigniseigenschaften der Umschaltfläche

Bild 2: Ereigniseigenschaften der Umschaltfläche

Beim Anklicken der Umschaltfläche werden alle drei Eigenschaften in der folgenden Reihenfolge ausgelöst:

  • Vor Aktualisierung
  • Nach Aktualisierung
  • Beim Klicken

Dies können Sie ganz einfach testen, indem Sie für alle drei Eigenschaften je eine Ereignisprozedur anlegen und diesen einen Haltepunkt hinzufügen. Die Ereigniseigenschaft fügen Sie am schnellsten hinzu, indem Sie den Wert [Ereigniseigenschaft] für die jeweilige Eigenschaft auswählen und auf die Schaltfläche mit den drei Punkten klicken. Einmal im VBA-Editor angelangt, können Sie weitere Ereignisprozeduren über die beiden Kombinationsfelder oben im Code-Fenster mit dem Klassenmodul Form_frmToggleButton des Beispielformulars hinzufügen. Dort klicken Sie dann links auf den grauen Rand neben dem Prozedurkopf, um Haltepunkte hinzuzufügen (siehe Bild 3).

Wichtige Ereignisprozeduren einer Umschaltfläche

Bild 3: Wichtige Ereignisprozeduren einer Umschaltfläche

Schauen wir, ob es Unterschiede zwischen den Prozeduren gibt – gegebenenfalls wird ja das Ereignis Vor Aktualisierung so früh ausgelöst, dass Value noch nicht den geänderten Wert liefert, dies aber bei den übrigen Ereignissen der Fall ist. Dazu lassen wir bei jedem Ereignis den Wert der Umschaltfläche ausgeben:

Private Sub tglAnAus_AfterUpdate()

     Debug.Print "AfterUpdate: ", tglAnAus.Value

End Sub

Private Sub tglAnAus_Click()

     Debug.Print "Click: ", tglAnAus.Value

End Sub

Private Sub tglAnAus_BeforeUpdate(Cancel As Integer)

     Debug.Print "BeforeUpdate: ", tglAnAus.Value

End Sub

Nach dem Anklicken der Umschaltfläche liefern jedoch alle drei Ereignisse den gleichen Wert, wie die folgende Ausgabe im Direktfenster bestätigt:

BeforeUpdate: -1

AfterUpdate: -1

Click: -1

Der einzige offensichtliche Unterschied ist somit, neben der Reihenfolge, der Parameter Cancel der Prozedur, die durch das Ereignis Vor Aktualisierung ausgelöst wird. Mit diesem können Sie festlegen, dass die Aktualisierung abgebrochen wird. Vorsicht ist hier bei der Abfrage des Wertes in der durch die Eigenschaft Vor Aktualisierung ausgelösten Prozedur geboten: Diese zeigt nämlich immer den Wert an, den die Umschaltfläche annehmen würde, wenn die Prozedur nicht durch Einstellen des Cancel-Parameters auf True abgebrochen wird.

Aktionen beim Umschalten

Das folgende Beispiel soll zeigen, wie Sie in Abhängigkeit vom Zustand der Umschaltfläche weitere Aktionen anstoßen. Dazu fügen wir dem Formular frmToggleButton eine einfache Schaltfläche namens cmdSchaltflaeche hinzu (siehe Bild 4). Ein Klick auf die Umschaltfläche soll die Schaltfläche aktivieren oder deaktivieren, je nachdem, ob die Umschaltfläche den Wert True oder False enthält.

Aktivieren und Deaktivieren weiterer Steuerelemente in Abhängigkeit vom Zustand der Umschaltfläche

Bild 4: Aktivieren und Deaktivieren weiterer Steuerelemente in Abhängigkeit vom Zustand der Umschaltfläche

Da anscheinend alle oben geprüften Ereignisprozeduren den gleichen Zustand liefern, können wir einfach die durch das Beim Klicken-Ereignis ausgelöste Prozedur für unsere Zwecke einsetzen.

Private Sub tglAnAus_Click()

     If Me!tglAnAus = True Then

         Me!cmdSchaltflaeche.Enabled = True

     Else

         Me!cmdSchaltflaeche.Enabled = False

     End If

End Sub

Wenn der Benutzer nun die Umschaltfläche herunterdrückt, wird die Schaltfläche cmdSchaltflaeche aktiviert. Wenn die Umschaltfläche gelöst wird, deaktiviert dies die Umschaltfläche. Die If...Then-Abfrage untersucht dazu den Ausdruck Me!tblAnAus auf den Wert True und weist der Eigenschaft Enabled der Schaltfläche cmdSchaltflaeche gegebenenfalls ebenfalls den Wert True zu, anderenfalls den Wert False.

Das schreit nach einer Vereinfachung: Sollten nicht noch weitere Aktionen innerhalb der If...Then-Bedingung ausgeführt werden, können Sie diese durch eine einzige Anweisung ersetzen:

Private Sub tglAnAus_Click()

     Me!cmdSchaltflaeche.Enabled = Me!tglAnAus

End Sub

Gebundene Umschaltflächen

Umschaltflächen lassen sich anstelle von Kontrollkästchen und Optionsfeldern einsetzen und können somit zur Auswahl des Inhalts von Ja/Nein-Feldern oder auch von Feldern mit mehreren möglichen, aber in der Anzahl eingeschränkten Werten dienen. Dies bezieht sich vor allem auf das Bearbeiten von in Tabellen gespeicherten Werten. Zu Testzwecken enthält die Beispieldatenbank eine Tabelle namens tblBeispiele, die neben einem Textfeld auch ein Ja/Nein-Feld und ein Feld namens Auswahl mit dem Datentyp Zahl enthält (siehe Bild 5).

Beispieldatenbank für Experimente mit der Umschaltfläche

Bild 5: Beispieldatenbank für Experimente mit der Umschaltfläche

Wenn Sie diese Tabelle als Datenherkunft des Formulars frmToggleButtonGebunden festlegen und alle Felder dieser Tabelle in den Formularentwurf ziehen, sieht dies zunächst wie gewohnt aus (siehe Bild 6).

Hinzufügen der Beispielfelder zum Formular frmToggleButtonGebunden

Bild 6: Hinzufügen der Beispielfelder zum Formular frmToggleButtonGebunden

Wir wollen zunächst das Ja/Nein-Feld JaNein, das standardmäßig als Kontrollkästchen ausgeführt wird, in eine Umschaltfläche umwandeln. Dazu wählen Sie aus dem Kontextmenü dieses Steuerelements den Eintrag Ändern zu|Umschaltfläche aus (siehe Bild 7).

Umwandeln des Kontrollkästchens in eine Umschaltfläche

Bild 7: Umwandeln des Kontrollkästchens in eine Umschaltfläche

Damit haben wir ein Zwischenziel erreicht: Wenn Sie nun in die Formularansicht des Formulars wechseln, können Sie den Wert des Ja/Nein-Feldes JaNein durch Aktivieren und Deaktivieren der Umschaltfläche auf den gewünschten Wert einstellen. Und wenn Sie mehr als einen Datensatz mit angelegt und das Feld JaNein für diese Datensätze auf unterschiedliche Werte eingestellt haben, können Sie beim Wechseln der Datensätze beobachten, wie der Status der Umschaltfläche jeweils auf den aktuelle Wert des Feldes JaNein eingestellt wird.

Ohne Beschriftung wird für den unbedarften Benutzer nicht recht deutlich, was sich mit diesem Steuerelement anfangen lässt. Aber welche Beschriftung fügen wir ihm hinzu? Am einfachsten wäre es, einen Text wie Ja/Nein hinzuzufügen. Allerdings lässt auch dies nicht wirklich erkennen, was man mit der Umschaltfläche anfangen soll – und auch nicht, welchen Status die Schaltfläche nun gerade aufweist.

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!