Kombinationsfeld-Nachbau mit Pepp

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Kombinationsfelder spielen eine wichtige Rolle bei der Dateneingabe in Formularen. Auch wenn sie mit zahlreichen Eigenschaften und Programmiermöglichkeiten ausgestattet sind, gibt es immer wieder Fälle, in denen man sich eine ausgefeiltere Bedienung oder eine andere Optik wünscht. Einige änderungsmöglichkeiten finden Sie in diesem Beitrag.

Neben Textfeldern sind Kombinationsfelder wohl das zweitwichtigste Steuerelement in Formularen. Dennoch hapert es manchmal – der eine möchte gern Einträge mit den Pfeiltasten auswählen (siehe auch Beitrag Eingabe in Text- und Kombinationsfelder vereinfachen, Shortlink 516), der andere ist mit dem Erscheinungsbild nicht ganz zufrieden. Außer der Möglichkeit, mehrere Spalten in der Liste einzublenden, beschränken sich Formatierungen auf die Schrift. Funktionell bieten Kombinationsfelder zwar eine automatische Wortergänzung, eine Filterung der Liste ist aber nicht oder nur umständlich möglich. Dieser Beitrag soll zeigen, wie Sie mehr erreichen können: Basteln Sie sich Kombinationsfelder einfach selbst!

Wo ist das Problem

Was soll Kombinationsfeldern, wie Access sie mitbringt, denn fehlen, könnten Sie fragen. Nichts, würde ich Ihnen antworten, solange sie nur einfache Listen mit einer mäßigen Zahl an Einträgen beherbergen. Sobald jedoch unter Hunderten oder Tausenden von Einträgen ausgewählt werden soll, kann dies zu einer Tipp- und Scroll-Arie ausarten. Wenn außerdem zu den einzelnen Einträgen genauere Informationen benötigt werden, helfen zusätzliche Spalten nur bedingt weiter.
Einige Beispiele dafür, was Kombinationsfelder unter Access nicht können:

  • Keine unterschiedlichen Schriftarten für die Spalten
  • Keine farbliche Unterscheidung der Zeilen (alternierender Hintergrund)
  • Keine Symbole oder Icons für die Einträge
  • Keine Filterung der Liste
  • Keine Filterung nach Teil des Feldinhalts (die automatische Begriffsergänzung berücksichtigt nur den Wortanfang, also Like "Begriff*”, und nicht Like "*Begriff *”).

Ein anderer Punkt ist der Ressourcenbedarf von Kombinationsfeldern. Jedes Kombinationsfeld hat ein eigenes Recordset als Basis, das unter Umständen mehrmals abgefragt oder aufgebaut wird. Jedes Recordset stellt im Prinzip jeweils eine komplette Tabelle dar. Für ein Formular mit zahlreichen Kombinationsfeldern, die vielleicht noch auf mehrere Registerkarten verteilt sind, steigt die Rechenleistung beim Füllen meist deutlich und auch Speicher und Netzwerktraffic sind betroffen. Ein gebundenes Kombinationsfeld ist im Grunde vergleichbar mit einem Unterformular. Dieser Umstand führt dazu, dass Access Formulare mit Kombinationsfeldern langsam lädt und die Belastung auf das Backend erhöht wird.
Wenn Sie nicht auf Kombinationsfelder verzichten können oder wollen, etwa, weil dem Kunden eine kompakte Oberfläche vorschwebt, dann sollten Sie eine ungebundene Version im Eigenbau in Betracht ziehen, um die Belastung des Systems zu verringern.

Wie baue ich ein Kombinationsfeld

Technisch gesehen ist ein Kombinationsfeld unter Windows die Ableitung eines Textfeldes. Dem Textfeld wird zusätzlich ein Knöpfchen spendiert. Ein Klick auf den Button erzeugt dann ein Listbox-Fenster. Auf die gleiche Weise könnte man bei dem geplanten Nachbau eines Kombinationsfeldes verfahren und drei Elemente kombinieren: Dazu müssen Sie ein Textfeld, eine Schaltfläche mit Bild und ein Listensteuerelement im Formular platzieren und diese programmtechnisch verbinden. Ein solches Pseudokombinationsfeld hätte dann allerdings die gleichen Nachteile wie das eingebaute von Access, denn das Listenfeld ist in seinen Möglichkeiten ebenfalls ziemlich beschränkt. Besser ist es daher, statt des Listenfeldes ein randloses Formular in Datenblatt- oder Endlosansicht einzusetzen. Damit sind der Gestaltung der Liste dann keine Grenzen mehr gesetzt. Für das Formular selbst sind zwei Varianten implementierbar: Entweder ein Unterformular oder ein Popup-Formular.
Bevor wir ins Detail gehen, schauen wir uns einmal an, wie sich ein herkömmliches Kombinationsfeld eigentlich verhält.

Das muss ein Kombinationsfeld können

Grundsätzlich lässt sich ein Kombinationsfeld vollständig sowohl mit der Maus als auch mit der Tastatur bedienen. Mit der Maus hat man diese Abfolge: Ein Klick auf den Pfeil-Button öffnet die Liste, die Bildlaufleiste dient zum Navigieren und ein Klick auf einen Eintrag wählt diesen aus.
Die Tastatur bietet weitere Möglichkeiten: Innerhalb des Textbereichs verhält sich das Kombinationsfeld nämlich genau so wie ein Textfeld. Mit der Taste F4 oder der Tastenkombination Alt + Cursor nach unten klappen Sie das Kombinationsfeld auf. Die gleichen Tastaturanweisungen oder die Tasten Escape und Tab schließen die Liste wieder. Das Scrollen durch die Liste geschieht durch die Cursor nach unten– und Cursor nach oben-Tasten oder, für größere Sprünge, mit Bild auf und Bild ab. Die Eingabe von Zeichen in das Textfeld navigiert zu entsprechenden Einträgen, falls die automatische Ergänzung eingeschaltet ist. Die Eingabetaste schließlich wählt den markierten Eintrag aus.

Die Liste selbst hat eine Datenherkunft, die auf einer Tabelle, einer Wertliste oder, ab Access 2002, direkt auf einem Recordset basiert. Die veraltete Möglichkeit, es mit einer benutzerdefinierten Funktion zu füllen, bleibt hier außen vor. Das Steuerelement lässt sich direkt an ein Datenfeld des Formulars oder eines Berichts binden – die Auswahl eines anderen Eintrags ändert also den Wert des zu Grunde liegenden Feldes.

Wollte man all diese Eigenschaften per Eigenbau akribisch nachbilden, würde dies eine ganze Menge Arbeit bedeuten. In den folgenden Beispielen ist das nur teilweise umgesetzt. Schließlich sollen die neuen Kombinationsfelder ja neue Möglichkeiten aufweisen, die dann unter Umständen auch eine andere Bedienung erfordern. Wichtig ist vor allem, dass die Liste sich mit den erwähnten Tastenkombinationen öffnen und schließen lässt, eine Verwendung auch allein mit der Maus möglich ist und das Ergebnis schließlich im zugewiesenen Datenfeld des Formulars landet.

Eigenbau, Version mit Unterformular

In Bild 1 sehen Sie, wie sich die einzelnen Komponenten des nachgebildeten Kombinationsfeldes zusammenfügen. Ausgangspunkt ist ein Textfeld mit Beschriftung (“Label”), an dessen rechter Seite eine Schaltfläche mit Bild angeflanscht wird. Das Textfeld ist im Formular ungebunden.

missing image file

Bild 1: Nachgebildetes Kombinationsfeld

Unterhalb des Textfeldes ist ein Unterformular angebracht, das rechtsbündig mit der Schaltfläche abschließt. Seine Eigenschaft Sichtbar wurde in der Entwurfsansicht auf Nein eingestellt. Vielleicht wundern Sie sich darüber, warum das Unterformular so klein ist, obwohl es nachher doch die ganze ausgeklappte Liste anzeigen soll. Der Grund ist ganz einfach der, dass das Unterformular über anderen weiteren Steuerelementen des Formulars liegen muss, sie also in der Entwurfsansicht überdecken würde. Das machte die Arbeit am Formularentwurf etwas schwierig, falls Sie nachträglich die überdeckten Steuerelemente bearbeiten wollten. Stattdessen wird das Unterformular zur Laufzeit beim Laden des Formulars per VBA auf die gewünschte Größe gebracht.

Ein Wort zur Schaltfläche: Hier muss man sich leider entscheiden, welches Bildchen man für das Pfeilsymbol anheften möchte. Je nach Access-Version, nach Betriebssystem und nach Einstellung der Option Mit einem Design versehene Steuerelemente verwenden sieht ein Kombinationsfeld-Pfeil unterschiedlich aus. In Bild 1 wurde ein Symbol mit XP-Style unter Access 2003 verwendet. Man könnte zwar zur Laufzeit die Einstellungen ermitteln und in Abhängigkeit davon individuelle Bildchen in den Button laden, der Aufwand hierfür scheint aber etwas übertrieben.

Es macht ja nichts, wenn der User bemerkt, dass es sich nicht um ein Windows-konformes Kombinationsfeld handelt. Im Verzeichnis der Beispieldatenbank comboboxfakes.mdb finden Sie zwei unterschiedliche Bilddateien, die sich für den Button eignen.

Wie nun die einzelnen Elemente zusammenarbeiten, lässt sich am besten anhand der Beipieldatenbank demonstrieren. Als Datenbasis wurde die von der Nordwind-Datenbank abgeleitete Version Südsturm verwendet. Das Formular frmBestellungen (siehe Bild 2) zeigt die Bestellungen einzelner Kunden und die zugehörigen Bestelldetails in einem Unterformular. Zwei gefakte Kombinationsfelder sind eingebaut: Ganz oben eines zur Auswahl des Kunden und im Unterformular eines zur Auswahl von Artikeln für eine Bestellung.

missing image file

Bild 2: Das Formular
Kundenbestellungen der Beispieldatenbank

Das Kundenkombinationsfeld ist in der Unterformularversion ausgeführt. Im Unterformular für die Artikel ist das nicht möglich, weil dieses selbst in Endlosansicht vorliegt und – abgesehen vom fehlenden Platz pro Zeile – damit nicht erlaubt, Unterformulare einzufügen. Dort kommt die Version mit einem Popup-Formular zur Anwendung, die später besprochen wird.
Das öffnen des Kundenkombinationsfeldes mit F4, Alt + Cursor nach unten oder Klick auf die Pfeil-Schaltfläche führt zur in Bild 3 dargestellten Erscheinung.

missing image file

Bild 3: Geöffnetes Kombinationsfeld im Eigenbau

Die Kunden sind in der Liste mit detaillierten Angaben aufgeführt. Sie bietet die Gelegenheit, nach verschiedenen Feldern wie Code, Kontaktperson, Firmenname oder Adresse zu filtern und das auch kombiniert. In die Felder der Filterzeile können Anfangsbuchstaben oder Wortteile eingegeben werden, die in einem SQL-String per LIKE zu einem Filterausdruck zusammengesetzt werden. Einträge können durch Klick auf eine der grün markierten Schaltflächen mit der Beschriftung Auswählen oder durch Betätigen der Eingabetaste selektiert werden. Die Liste schließt sich dann wieder und der Eintrag wird in die Kunden-Textbox übernommen.

Sie mögen einwenden, dass man statt eines solchen nachgebauten Kombinationsfelds auch gleich ein Popup-Fformular verwenden könnte. Dazu müsste man jedoch eine Möglichkeit zum öffnen dieses Formulars wie etwa eine zusätzliche Schaltfläche bereitstellen, die für die meisten Benutzer jedoch zunächst ungewohnt sein dürfte. Hat der Benutzer hingegen ein Kombinationsfeld vor sich, dann sind die Funktionen der Pfeil-Schaltfläche und die Tastenkombinationen selbstverständlich.

Die Funktion im Detail

Das öffnen der Liste geschieht, indem das Unterformular sichtbar gemacht wird. So, wie es im Entwurf eingerichtet wurde, sähe das dann zunächst eigenartig aus – wurde es doch verkleinert angelegt.

Deshalb ist in der Ereignisprozedur Beim Anzeigen des Hauptformulars der Code zum Einstellen der gewünschten Größe des Unterformulars untergebracht:

Me!cboKunden.Left = 980
Me!cboKunden.Width = 10900
Me!cboKunden.Height = 6630

Stören Sie sich nicht daran, dass dem Unterformularnamen das Präfix cbo statt des “korrekten” sfrm spendiert wurde. Es wurde zur leichteren Unterscheidung von “richtigen” Unterformularen gewählt. Die Beim Klicken-Ereignisprozedur der Pfeil-Schaltfläche macht das Unterformular sichtbar:

Private Sub cmdDropdown_Click()
Me!cboKunden.Visible = _
Not Me!cboKunden.Visible
... End Sub

Hier wird Visible nicht einfach auf True gesetzt, sondern ausgewertet, ob das Unterformular eventuell bereits geöffnet wurde. Dann nämlich wird es wieder auf Unsichtbar gestellt, was dem Verhalten des Pfeil-Buttons eines herkömmlichen Kombinationsfeldes entspricht. Die gleiche Aktion soll erfolgen, wenn die Tasten F4 oder Alt + Cursor nach unten betätigt werden. Das ist mit dem Key_Down-Ereignis (Bei Taste Ab) des Kunden-Textfeldes zu lösen. In dieser Prozedur werden die passenden Keycodes abgefangen:

Private Sub txtKunde_KeyDown(KeyCode As _
Integer, Shift As Integer)
If (KeyCode = vbKeyDown And Shift = _
ALT_MASK) Or (KeyCode = vbKeyF4 And _
Shift = 0) Then
cmdDropdown_Click
End If
End Sub

Statt hier den gleichen Code wie für die Schaltfläche zu wiederholen, wird einfach die Prozedur cmdDropDown_Click selbst aufgerufen.

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

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar