Access Grundlagen: Schaltfläche im Endlosformular

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich möchte im Detailbereich eines Endlosformulars

  1. den Wert eines Feldes, z.B. die Beschriftung einer Schaltfläche ändern
  2. die Eigenschaften eines Steuerelements, z.B. einer Schaltfläche ändern
  3. ein Steuerelement, z.B. eine Schaltfläche ausblenden (nur Ersatzlösung möglich)

Die Änderung soll durch ein Ereignis ausgelöst und in Abhängigkeit vom Wert eines anderen Feldes durchgeführt werden.

Fall 1: Wert (Beschriftung) ändern

Ich möchte durch das Auslösen eines Ereignisses in einem Steuerelement (Quellelement) den Wert eines anderen Feldes, z.B. die Beschriftung einer Schaltfläche (Zielfeld) im aktuellen Datensatz ändern.

  • Das auslösende Ereignis kann z.B. das Click-, DblClick-, AfterUpdate-Ereignis des Quellelements sein. Das auslösende Quellelement kann jedes Steuerelement sein, und muss keine Datenquelle haben.
  • Das Zielfeld kann jedes Feld des aktuellen Datensatzes sein, das eine Datenquelle besitzt.

Lösungsbeispiele

Beispiel 1: Wert eines Feldes Beim Doppelklicken ändern

Wenn das Feld Datumsfeld leer ist, wird beim Doppelklicken das aktuelle Datum eingetragen, ansonsten wird das vorhandene Datum gelöscht.

Private Sub Datumsfeld_DblClick(Cancel As Integer)
 
 If IsNull(Me.Datumsfeld) Then
   Me.Datumsfeld = Date
 Else
   Me.Datumsfeld = Null
 End If
 
End Sub

Beispiel 2: Beschriftung einer Schaltfläche beim Klicken ändern

Da eine Schaltfläche (Zielfeld) keine Datenquelle besitzt, wird als Ersatz ein zu einer Schaltfläche umgebautes Textfeld txtErsatzschaltfläche verwendet. Die Datenquelle des Textfeldes dient hierbei als Beschriftung für die Ersatzschaltfläche. Die Ausführung des Codes übernimmt eine über das Textfeld gelegte, unsichtbare Schaltfläche cmdEineSchaltfläche (Beschreibung siehe unten).

Der Wert des Textfeldes txtErsatzschaltfläche wird beim Klick auf die darüber gelegte, unsichtbare Schaltfläche cmdEineSchaltfläche auf Erledigt gesetzt, wenn sein vorheriger Wert Null oder Unerledigt ist.

Private Sub cmdEineSchaltfläche_Click()
 
 If Not Nz(Me.txtErsatzschaltfläche) = "Erledigt" Then
   Me.txtErsatzschaltfläche = "Erledigt"
 Else
   Me.txtErsatzschaltfläche = "Unerledigt"
 End If
 
End Sub

Fall 2: Eigenschaften ändern

Ich möchte die Eigenschaften eines Steuerelements in Abhängigkeit vom Wert eines anderen Steuerelements im aktuellen Datensatz ändern.

Das geht mittels der Bedingten Formatierung, mit der nur die Eigenschaften von Text- und Kombinationsfeldern geändert werden können. Da folglich die Eigenschaften einer Schaltfläche nicht geändert werden können, wird als Ersatz ein zu einer Schaltfläche umgebautes Textfeld txtErsatzschaltfläche verwendet. Die Datenquelle des Textfeldes dient hierbei als Beschriftung für die Ersatzschaltfläche. Die Ausführung des Codes übernimmt eine über das Textfeld gelegte, unsichtbare Schaltfläche (Beschreibung siehe unten).

Lösungsbeispiele

Beispiel 1: In Abhängigkeit vom Wert eines Ja/Nein-Feldes sollen die Eigenschaften des Steuerelements txtErsatzschaltfläche geändert werden.

Dazu wird im Entwurfsbereich des Formulars das Steuerelement txtErsatzschaltfläche markiert, und über das Menü Format die Bedingte Formatierung aufgerufen. Hier wird eine neue Regel angelegt, die für alle Datensätze wirksam wird, in denen das Feld EinJaNeinFeld den Wert Wahr hat. Dazu ist folgender Eintrag im Editor notwendig:

Ausdruck ist    [EinJaNeinFeld]=Wahr   

Anschließend können folgende Eigenschaften des Steuerelements txtErsatzschaltfläche in der Formatierungsregel der Bedingten Formatierung geändert werden:

  • FontBold (Fettschrift)
  • FontItalic (Kursivschrift)
  • FontUnderline (Text unterstrichen)
  • BackColor (Hintergrundfarbe)
  • ForeColor (Textfarbe)
  • Enabled (Aktiviert)

Hinweis:
Der im Ausdruck der Bedingten Formatierung verwendete Steuerelementname muss laut Angaben von Microsoft unterschiedlich zum Namen seiner Datenherkunft (Tabellenfeldname) sein.

Beispiel 2: Die Bedingte Formatierung (FormatCondition) kann auch per Code z.B. beim Öffnen des Formulars zugewiesen werden.

In diesem Beispiel werden alle Text- und Kombinationsfelder des aktuellen Datensatzes außer dem Steuerelement txtErsatzschaltfläche deaktiviert, wenn das Feld EinJaNeinFeld den Wert True hat.

Private Sub Form_Open(Cancel As Integer)
 
 Dim ctl As Access.Control
 
 For Each ctl In Me.Section(acDetail).Controls
 
   If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
 
      ' Alle Text- und Kombinationsfelder im Detailbereich, außer txtErsatzschaltfläche
      If Not ctl.Name = "txtErsatzschaltfläche" Then
         ctl.FormatConditions.Add acExpression, , "EinJaNeinFeld = True"
         ctl.FormatConditions(0).Enabled = False
      End If
 
   End If
 
 Next ctl
 
End Sub

Beispiel 3: Als Kombination aus Fall 1 und Fall 2 sollen die Beschriftung und die Hintergrundfarbe der Ersatzschaltfläche geändert werden.

Die Beschriftung wird per Code (Fall 1), und die Hintergrundfarbe mittels der Bedingten Formatierung in Abhängigkeit vom Feld EinJaNeinFeld (Fall 2) geändert.

Ausdruck ist    [EinJaNeinFeld]=Wahr   

Folgende Sub-Prozedur ändert den Wert des Feldes txtErsatzschaltfläche und damit die Beschriftung der Ersatzschaltfläche. Über die Änderung des Feldes EinJaNeinFeld wird die Bedingte Formatierung des Feldes txtErsatzschaltfläche gesteuert.

Private Sub cmdEineSchaltfläche_Click()
 
 If Not Nz(Me.txtErsatzschaltfläche) = "Erledigt" Then
   Me.txtErsatzschaltfläche = "Erledigt"
   Me.EinJaNeinFeld = True
 Else
   Me.txtErsatzschaltfläche = "Unerledigt"
   Me.EinJaNeinFeld = False
 End If
 
End Sub

Fall 3: Steuerelement ausblenden (Ersatzlösung)

Ich möchte ein Steuerelement eines Datensatzes in Abhängigkeit vom Inhalt eines Feldes ausblenden (unsichtbar machen).

Das ist nicht möglich. Als Ersatzlösung kann aber eine entsprechende Meldung angezeigt werden.

Lösungsbeispiel

Beim Klick auf die Schaltfläche cmdEineSchaltfläche wird eine Meldung angezeigt, wenn das Feld EinJaNeinFeld im aktuellen Datensatz den Wert True hat, ansonsten wird ein Bericht geöffnet.

Private Sub cmdEineSchaltfläche_Click()
 
 If Me.EinJaNeinFeld = True Then
    MsgBox "Die Aktion kann nicht ausgeführt werden."
 Else
    DoCmd.OpenReport "EinBerichtsname", acViewPreview
 End If
 
End Sub

Ersatzschaltfläche erstellen

Um die in den oben gezeigten Lösungswegen verwendete Ersatzschaltfläche zu erstellen, wird ein Textfeld zur Schaltfläche umfunktioniert.


Das Textfeld muss eine Datenquelle in der dem Formular zugrunde liegenden Tabelle haben, die als Beschriftung für die Ersatzschaltfläche dient, während seine Eigenschaften über die Bedingte Formatierung geändert werden können.

Eigenschaften des Textfeldes txtErsatzschaltfläche:

  • Hintergrundfarbe: -2147483633 (Oberfläche der Systemschaltfläche)
  • Spezialeffekt: Erhöht
  • Textausrichtung: Zentriert


Damit der Mauszeiger bei der Bedienung der Ersatzschaltfläche in Pfeilform dargestellt wird, wird über das Textfeld eine unsichtbare Schaltfläche gelegt, die auch die Ausführung des Codes übernimmt.

Eigenschaften der Schaltfläche cmdEineSchaltfläche:

  • Hintergrundart: Transparent
  • Beschriftung: keine
  • Breite und Höhe: gleiche Abmessungen wie das Textfeld


Als Alternative zu der unsichtbaren Schaltfläche könnte der Mauszeiger über dem Textfeld auch per Code geändert werden.

Wikilinks

Weblinks