Steuerelemente aktivieren und deaktivieren

Wenn eine Funktion oder ein Steuerelemente temporär nicht zur Verfügung steht, haben Sie zwei Möglichkeiten: Entweder Sie weisen den Benutzer per Meldungsfenster auf diesen Umstand hin, wenn er versucht, das Steuerelemente dennoch zu benutzen. Das ist schlecht, weil dies den Benutzer einen unnötigen Klick kostet. Oder Sie deaktivieren das Steuerelement direkt. Das dies manchmal gar nicht so einfach ist und wie Sie es dennoch schaffen, zeigt dieser Beitrag.

Gründe, Steuerelemente zu deaktivieren, gibt es viele:

  • Eine Speichern-Schaltfläche oder eine Abbrechen-Schaltfläche soll nur aktiviert sein, wenn es überhaupt änderungen gibt, die gespeichert oder verworfen werden könnten.
  • Eine OK-Schaltfläche soll nur aktiviert sein, wenn der Benutzer alle notwendigen Daten eingegeben hat.
  • Eine Suchen-Schaltfläche wird nur aktiviert, wenn der Benutzer einen Suchbegriff eingegeben hat.
  • Ein Textfeld steht nicht zur Verfügung, weil die entsprechende Option nicht ausgewählt ist.

Schauen wir uns also erstmal an, wie wir Steuerelemente in Abhängigkeit bestimmter Bedingungen aktiviern und deaktivieren können.

Steuerelemente in Abhängigkeit anderer Steuerelemente aktivieren oder deaktivieren

Das Formular aus Bild 1 besteht aus einem Kombinationsfeld, das die Kundenart festlegt (Firma oder Privatperson) und davon abhängig die Textfelder txtFirma, txtVorname und txtNachname aktivieren beziehungsweise deaktivieren soll. Wenn keine Kundenart ausgewählt ist, sollen dementsprechend alle Steuerelemente deaktiviert sein.

pic001.png

Bild 1: Beispielformular der Datenbank

Schauen wir uns erst an, was geschehen soll, wenn der Benutzer eine Kundenart auswählt. Dies löst das Ereignis Nach Aktualisierung des Kombinationsfelds aus. Die entsprechende Ereignisprozedur sieht wie folgt aus:

Private Sub cboKundenartID_AfterUpdate()
    Select Case Me!cboKundenartID
        Case 1
            Me!txtFirma.Enabled = True
            Me!txtVorname.Enabled = False
            Me!txtNachname.Enabled = False
        Case 2
            Me!txtFirma.Enabled = False
            Me!txtVorname.Enabled = True
            Me!txtNachname.Enabled = True
        Case Else
            Me!txtFirma.Enabled = False
            Me!txtVorname.Enabled = False
            Me!txtNachname.Enabled = False
    End Select
End Sub

Sie fragt den Wert von cboKundenartID ab und stellt die Enabled-Eigenschaft der folgenden Textfelder entsprechend ein.

Das Einstellen von Eigenschaften wie Enabled, Locked, Visible et cetera, die abhängig von einer oder mehrerer Bedingungen auf True oder False eingestellt werden können, ist grundsätzlich auf zwei Arten möglich: Auf die die schreibintensive Art wie oben oder auf eine etwas pfiffigere Weise wie in der folgenden Variante:

Private Sub cboKundenartID_AfterUpdate()
    Me!txtFirma.Enabled = Nz(Me!cboKundenartID) = 1
    Me!txtVorname.Enabled = Nz(Me!cboKundenartID) = 2
    Me!txtNachname.Enabled = Nz(Me!cboKundenartID) = 2
End Sub

Genau wie oben soll das Feld txtFirma nur aktiviert sein, wenn das Kombinationsfeld cboKundenartID den Wert 1 enthält. Beim Wert 2 sollen nur die beiden Felder txtVorname und txtNachname aktiviert sein.

Die zweite Variante löst dies etwas eleganter und mit wesentlich weniger Codezeilen. Die erste Zeile sorgt beispielsweise dafür, dass die Eigenschaft Enabled des Textfeldes txtFirma nur auf True eingestellt wird, wenn cboKundenartID den Wert 1 hat (sollte cboKundenartID den Wert Null aufweisen, was darauf hindeutet, dass gar kein Eintrag ausgewählt ist, liefert Nz(Me!cboKundenartID) ersatzweise den Wert 0).

Beide Varianten liefern das Ergebnis aus Bild 2.

pic002.png

Bild 2: Das Kombinationsfeld aktiviert oder deaktiviert die weiteren Steuerelemente.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar