Kombinationsfeldeintrag per Doppelklick

Eine gute Ergonomie macht sich manchmal in Kleinigkeiten bemerkbar. So machte mich zuletzt ein Kunde darauf aufmerksam, dass es doch toll wäre, die Einträge von Kombinationsfeldern wie auch im Eigenschaftsfenster von Access einfach per Doppelklick auszuwählen – so, dass mit jedem Doppelklick der jeweils nächste Eintrag angezeigt wird. Nun, technisch ist das recht leicht umzusetzen, aber die Idee muss man erstmal haben! In diesem Beitrag lesen Sie nun, wie Sie Ihre Kombinationsfeldeinträge mit einer Funktion zum Auswählen von Einträgen per Doppelklick ausstatten.

Voraussetzung für die hier vorgestellte Lösung ist ein beliebiges Kombinationsfeld – egal, ob es aus einer Feldliste, einer Wertliste oder einer Tabelle oder Abfrage als Datensatzherkunft gefüttert wird. Zu Beginn der Entwicklung dieser Lösung schien es drei Fälle zu geben, um die man sich beim Auslösen der Ereignisprozedur Beim Doppelklicken kümmern muss:

  • Anzeigen des ersten Eintrags, wenn zuvor noch kein Eintrag markiert war, das Kombinationsfeld also den Wert Null enthält,
  • Auswählen des folgenden Eintrags, wenn ein beliebiger Eintrag außer dem letzten Eintrag ausgewählt ist und
  • Anzeigen des Wertes Null, wenn der Doppelklick bei ausgewähltem letzten Eintrag stattfindet, damit das Springen von Eintrag zu Eintrag von vorn begonnen werden kann.

Die zweite Frage, die sich stellte, war: Wie erfahre ich, welcher der jeweils nächste Eintrag ist und wähle diesen aus – und wie identifiziere ich den letzten Eintrag des Kombinationsfeldes

Leeres Kombinationsfeld

Beginnen wir mit dem Fall, dass das Kombinationsfeld noch leer ist. Zu Beispielzwecken verwenden wir im Formular frmKombifeldPerDoppelklick gleich zwei Kombinationsfelder – eines mit einer Wertliste und eines mit einer auf der Tabelle tblPersonal basierenden Abfrage (s. Bild 1). Legen Sie dort zunächst eines der Kombinationsfelder, zum Beispiel cboPersonal, den Wert [Ereignisprozedur] für die Eigenschaft Bei Doppelklick an und erstellen Sie mit einem Klick auf die Schaltfläche mit den drei Punkten die entsprechende Ereignisprozedur.

pic001.png

Bild 1: Beispielformular zum ändern des Kombinationsfeldeintrags per Doppelklick

Ob aktuell kein Eintrag ausgewählt ist, ermitteln Sie mit der Funktion IsNull. Liefert IsNull(Me!Personal) den Wert True zurück, ist noch kein Eintrag ausgewählt. In diesem Fall soll der erste Eintrag aktiviert werden. Wie dies funktioniert, wurde in Access im Unternehmen schon zigfach durchexerziert – und zwar dort, wo gleich beim Öffnen eines Formulars der erste Eintrag eines Kombinationsfeldes angezeigt werden soll.

Den entsprechenden Wert ermitteln Sie über die Eigenschaft ItemData mit dem Index 0:

Me!cboPersonal = Me!cboPersonal.ItemData(0)

Damit können Sie den Fall des leeren Kombinationsfeldes bereits testen:

If IsNull(Me!cboPersonal) Then
    Me!cboPersonal = Me!cboPersonal.ItemData(0)
End If

Kombinationsfeld mit ausgewählten Wert

Wenn bereits ein Wert ausgewählt ist, soll das Kombinationsfeld beim Doppelklick zum nächsten Eintrag springen. Dazu fügen Sie zur obigen If…Then-Bedingung zunächst einfach einen Else-Zweig hinzu. Im ersten Fall haben wir mit der ItemData-Eigenschaft und dem Index 0 den Wert des ersten Eintrags des Kombinationsfeldes ermittelt. Auf die gleiche Weise können Sie auch die übrigen Einträge selektieren – Sie brauchen nur den der Position entsprechenden Index anzugeben.

Woher aber erhalten wir die Position Dazu offeriert das Kombinationsfeld die ListIndex-Eigenschaft. Sie gibt den Index des aktuell ausgewählten Eintrags zurück. Der per Doppelklick auszuwählende Eintrag ist der nächste Eintrag, also addieren wir den Wert 1 zum Index und ermittelten mit ItemData den Wert zu diesem Index. Diesen weisen Sie dem Kombinationsfeld zu und sorgen so dafür, dass per Doppelklick die folgenden Einträge angesteuert werden können.

Letzter Wert

Was aber ist mit dem letzten Eintrag Soll beim Doppelklick auf den letzten Eintrag wieder der erste Eintrag angezeigt werden oder das Kombinationsfeld gar wieder geleert werden Am ergonomischsten wäre es wohl, wenn nach dem letzten Eintrag zunächst wieder ein leeres Kombinationsfeld und erst dann wieder der erste Eintrag ausgewählt würde. Auf diese Weise würde der Benutzer leicht erkennen können, dass er alle Einträge einmal durchlaufen hat.

Das Schöne an dieser Variante ist, dass Sie gar nichts mehr tun müssen, um sie zu realisieren: Wenn das Kombinationsfeld den letzten Eintrag anzeigt und der Benutzer per Doppelklick zum folgenden Eintrag springen will, liefert Me!cboPersonal.ItemData(Me!cboPersonal.ListIndex + 1) den Wert Null, weil es keinen entsprechenden Wert im Kombinationsfeld findet.

Die Variante aus Listing 1 scheint also bereits die komplette Lösung unseres Problems zu sein. Und es kommt noch besser: Wenn kein Wert im Kombinationsfeld ausgewählt ist, liefert nicht nur IsNull den Wert True, sondern die ListIndex-Eigenschaft auch noch den Wert -1. Was bedeutet das Nun: Sie können auch noch diesen Fall mit der folgenden Anweisung abhandeln:

Listing 1: Auswählen des jeweils nächsten Datensatzes per Doppelklick

Private Sub cboPersonal_DblClick(Cancel As Integer)
    If IsNull(Me!cboPersonal) Then
        Me!cboPersonal = Me!cboPersonal.ItemData(0)
    Else
        Me!cboPersonal = Me!cboPersonal.ItemData(Me!cboPersonal.ListIndex + 1)
    End If
End Sub
Me!cboPersonal = Me!cboPersonal.
ItemData(Me!cboPersonal.ListIndex + 1)

Wenn ListIndex den Wert -1 aufweist, wird ItemData mit dem Index 0 abgefragt – und das entspricht genau dem ersten Eintrag. Die komplette Lösung sieht also wie in Listing 2 aus – ein Einzeiler!

Listing 2: Auswählen des jeweils nächsten Datensatzes per Doppelklick, einfache Variante

Private Sub cboPersonal_DblClick(Cancel As Integer)
    Me!cboPersonal = Me!cboPersonal.ItemData(Me!cboPersonal.ListIndex + 1)
End Sub

Kommando zurück!

Das ist zugegebenermaßen zu einfach. Also bauen wir noch eine Variante ein, bei der ein Doppelklick bei gedrückter Umschalttaste nicht den folgenden, sondern den vorherigen Eintrag auswählt.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar