Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2006.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie ein Steuerelement kennen, mit dem Sie beispielsweise das Beziehungen-Fenster nachbauen können.

Techniken

FieldList-Steuerelement, VBA, Formulare

Voraussetzungen

Access 2000 und höher

Beispieldateien

FieldListDemo2000.zip (Access 2000 und höher)

Listbox Deluxe

Sascha Trowitzsch, Berlin

Ein Handicap für den Entwickler bei der Gestaltung der Benutzeroberfläche von Datenbanken ist die etwas limitierte Zahl von Steuerelementen, die Access mitbringt. Zudem ist auch die Zahl der Eigenschaften dieser Steuerelemente, von den Möglichkeiten der Datenbindung abgesehen, nicht gerade weltbewegend. Andere "richtige" Entwicklungsumgebungen wie Visual Studio, Delphi etc. bieten da einen weitaus größeren Fundus. Abhilfe schaffen da nur zusätzliche ActiveX-Controls, die, soweit sie in guter Qualität vorliegen, meist kostenpflichtig erworben werden müssen und das Problem mit der Weitergabe dieser OCXe mit sich bringen. Access im Unternehmen zeigt, dass diesbezüglich mehr in Access steckt, als man denkt.

In einer normalen Access-Installation sind bereits einige ActiveX-Steuerelemente enthalten, die Microsoft wenig oder gar nicht dokumentiert hat. Neben den Elementen der Microsoft Forms Library (fm20.dll) sind ab Office XP auch die Microsoft Common Controls mit im Boot, die zum Beispiel Treeview- und ListView-Control beherbergen.

Besonders gut versteckt hat Microsoft aber das FieldList-Steuerelement, das sich in der Datei accwiz.dll verbirgt und von den internen Assistenten verwendet wird. Ein Beispiel ist der Dialog des Dokumentierers, den Sie über den Menüpunkt Extras/Analyse/Dokumentierer öffnen. Auch eine Ansicht wie das Beziehungen-Fenster einer Access-Datenbank lässt sich mit diesem Steuerelement nachbilden.

Zum FieldList-Steuerelement gibt es weder eine Dokumentation von Microsoft noch andere Beschreibungen im Internet - mit der Ausnahme einer Beispieldatenbank von Stephen Lebans (http://www.lebans.com/vb_listbox.htm).

In diesem Artikel lernen Sie dieses Steuerelement und seine Möglichkeiten kennen. Die Eigenschaften, Methoden und Parameter des Steuerelements sind experimentell ermittelt worden. Dieser Beitrag kann nicht die komplette Beschreibung dieses Steuerelements liefern; aus der Beispieldatenbank FieldList.mdb geht jedoch alles Weitere hervor.

1 Das FieldList-Steuerelement

Die Datei accwiz.dll wird bei jeder Access-Installation seit Version 97 automatisch im Office-Verzeichnis gespeichert. Das gilt ebenso für Runtime-Installationen.

Das darin unter anderem enthaltene FieldList-Steuerelement steht somit unter Access grundsätzlich zur Verfügung, ohne dass zusätzliche Komponenten installiert werden müssten.

Das FieldList-Steuerelement stellt komplexe Listenfelder bereit, die in Erscheinung und Funktion recht flexibel sind und Drag and Drop-Operationen ermöglichen.

Steuerelement öffentlich machen

Um ein ActiveX-Steuerelement in ein Access-Formular einzufügen, bedient man sich des Menüs Einfügen/ActiveX-Steuerelement... und wählt das entsprechende Steuerelement aus. Standardmäßig findet man in der Liste des Dialogs aber keinen Eintrag namens FieldList. Microsoft hat es, aus welchen Gründen auch immer, versteckt. Mit einem kleinen Eintrag in der Registry kann man das aber ändern: Doppelklicken Sie die auf der Heft-CD befindliche Datei accwiz.reg und fügen Sie so ein Branding des Controls als verfügbares Steuerelement hinzu. Danach finden Sie das Steuerelement in der Liste der ActiveX-Steuerelemente unter dem Eintrag FieldListCtrl.1 Object.

Funktionen des FieldList-Steuerelements

In ein Formular eingefügt sieht man außer einer grauen Fläche erstmal gar nichts von dem Steuerelement. Diese Fläche ist nur ein Container für darauf zu platzierende Listboxen.

Das Steuerelement kann nämlich eine beliebige Zahl von Listboxen auf dieser Containerfläche erzeugen; diese lassen sich ja nach den Anforderungen auch auf der Containerfläche verschieben.

Bedauerlicherweise geschieht das ausschließlich über VBA-Code; das Anklicken des von ActiveX-Steuerelementen bekannten Buttons mit den Pünktchen im Eintrag Benutzerdefiniert des Eigenschaftsfensters fördert nur eine Fehlermeldung zutage - das Steuerelement enthält keine Property Pages für weitere Einstellungen.

Im Überblick zunächst einige der Möglichkeiten des Controls:

  • Anzeige mehrerer Listboxen.
  • Zwischen den Listboxen können Zeilen per Drag and Drop verschoben werden (allerdings unter Zuhilfenahme von etwas VBA-Code).
  • Die erzeugten Listboxen können auf der Containerfläche frei mit der Maus verschoben werden. Alternativ kann man sie aber auch mit der Einstellung einer Eigenschaft "festsetzen".
  • Die Größe der Listboxen kann mit der Maus beliebig verändert werden, genau so, wie das mit anderen Windows-Fenstern möglich ist.
  • Zwischen den einzelnen Listboxen beziehungsweise deren Einträgen können beliebig viele Verbindungslinien gezogen werden. Sie kennen das aus dem Beziehungsfenster von Access oder dem Abfrageneditor.
  • Die Listboxen kennen drei Darstellungsmodi (siehe Abbildungen weiter unten).
  • Die Einträge werden bei Bedarf auf mehrere Spalten umgebrochen.
  • Die Einträge der Listboxen können Checkboxen und benutzerdefinierte Icons enthalten.
  • Es gibt diverse Einstellungen für die Listboxen, die Aussehen, Hintergrundfarbe, Schrift verändern können.
  • Einige Eigenschaften der Schrift können für die Zeilen einer Listbox einzeln festgelegt werden (normal, fett, kursiv).
  • Was nicht möglich ist:

  • Die Schriftart ist nicht variabel. Es ist offenbar MS Sans Serif in 8-Punkt-Größe fest eingestellt.
  • Eine Listbox kann im Gegensatz zur Access-Listbox nur eine Spalte darstellen.
  • Das Steuerelement speichert seine eingestellten Eigenschaften nicht beständig ab. Das heißt, dass dies gegebenenfalls per Code zu erledigen ist.
  • Erscheinungsbild des
    Steuerelements

    Um eine Vorstellung zu bekommen, wie das Steuerelement aussehen kann, schauen Sie sich Abb. 1, Abb. 2 und Abb. 3 an.

    Abb. 1: Das FieldList-Steuerelement mit nackten Einträgen, mit Symbolen, mit Kontrollkästchen und mit beidem

    Abb. 2: Die obigen Varianten gibt es auch ohne Titelleiste und sogar ohne Rahmen.

    Abb. 3: Weitere Varianten des FieldList-Steuerelements

    Besonders interessant ist die Möglichkeit, Benutzeroberflächen im Stil des Beziehungen-Fensters von Access nachzubauen. Eine Spielwiese zum Ausprobieren der unterschiedlichen Einstellungen liefert das Formular frmFieldList (s. Abb. 4).

    Wie dort gut zu erkennen ist, lassen sich mehrere Listboxen auf der Fläche des Steuerelements positionieren. Außerdem ist das Verbinden verschiedener Einträge wie im Beziehungen-Fenster möglich.

    Es fehlt noch die Darstellung der verschiedenen Cursorformen, die das FieldList-Steuerelement anzeigen kann. Sie sind vor allem für Drag and Drop-Operationen nützlich, weil sie in etwa den Cursors entsprechen, die auch beim Ziehen von Feldern im Abfrageeditor erscheinen.

    Wie Sie diese Ansichten des Steuerelements erzeugen können, erfahren Sie teilweise im nächsten Abschnitt. Die vollständige Dokumentation finden Sie in der Beispieldatenbank FieldList.mdb und dort im kommentierten Code des Formulars frmFieldList.

    Das Objektmodell des
    FieldList-Steuerelements

    Vorbemerkung: Wenn Sie beabsichtigen, Ihre Datenbank mit enthaltenem FieldList-Steuerelement auch auf anderen Rechnern einzusetzen, dann sollten Sie beim Entwickeln möglichst dieselbe Office-Version verwenden.

    Das Steuerelement ist zwar seit Access 97 weitgehend unverändert geblieben, hat aber unter Access 2003 die Versions-ID 8.1, davor war es immer die 8.0. Eine mit Access 2000 erstellte Datenbank zeigt deshalb unter Umständen das Steuerelement auf einem System mit Access 2003 nicht korrekt an.

    Die erste Informationsquelle, wenn man es mit einer fremden ActiveX-Datei zu tun hat, ist der Objektkatalog. Aus ihm kann man die Klassen, Eigenschaften, Methoden und Ereignisse der Objekte erfahren. Haben Sie ein FieldList-Steuerelement in ein Formular eingefügt, so findet sich automatisch die zugehörige Bibliothek AccWizObjects im Objektkatalog. Außerdem wurde ein Verweis auf die Microsoft Access Wizzard Control Library gesetzt.

    Auf den ersten Blick scheint das Objektmodell dieser Bibliothek recht spartanisch ausgestattet. Das liegt daran, dass die meisten Objekte ausgeblendet sind. Rechtsklicken Sie also irgendwo in den Objektkatalog und aktivieren Sie den Eintrag Verborgene Elemente anzeigen des Kontextmenüs; schon füllt sich die Liste der Klassen mit vielen neuen Elementen.

    Abb. 4: Beispielformular zum Experimentieren mit den Möglichkeiten des FieldList-Steuerelements

    Für das FieldList-Steuerelement sind nur die folgenden Klassen von Bedeutung:

  • FieldList: Enthält die Eigenschaften und Methoden des Containers, also der Fläche, die die Listboxen anzeigt.
  • IFieldListWnd: Stellt eine einzelne Listbox und deren Eigenschaften dar.
  • IJoinLine: Bezieht sich auf eine Verbindungslinie zwischen den Zeilen von zwei Listboxen.
  • Das FieldList-Objekt steuert eigentlich nur zwei wesentliche Eigenschaften: Die Bildliste (Picture) für die Icons der Listboxen und das Erscheinungsbild des Cursors (SetCursor). Ob Scrollbars für die Containerfläche angezeigt werden, lässt sich im Eigenschaftsfenster des Formulars festlegen, nicht aber per Code.

    Die wichtigste Methode ist AddFieldList. Sie ist es, die auf der Containerfläche eine neue Listbox erzeugt. Mit DeleteFieldList wird eine vorhandene Listbox wieder gelöscht. Die Methode AddJoinLine erstellt Verbindungslinien zwischen den Listboxen.

    Nachdem eine oder mehrere Listboxen erzeugt wurden, kann man über die Auflistung FieldLists auf sie zugreifen. FieldList(0) gibt zum Beispiel das erste erstellte IFieldListWnd-Objekt zurück. Auf JoinLines erhält man analog über die .JoinLines-Auflistung Zugriff (Rückgabewert: IJoinLine-Objekt).

    Das FieldList-Objekt ist außerdem für die gesamte Ereignis-Steuerung zuständig - wir haben es hier mit einer flachen Objekthierarchie zu tun. Es ruft 17 verschiedene Ereignisse sowohl für die Containerfläche wie auch die Listboxen auf. Joinlines haben leider keine Ereignisse.

    Das IFieldListWnd-Objekt stellt eine einzelne Listbox dar und steuert deren Eigenschaften. Das sind in erster Linie jene, die das Erscheinungsbild bestimmen. Die wichtigste Methode ist AddItem. Mit ihr fügt man der Listbox neue Einträge hinzu. Entfernen kann man die Einträge dann wieder mit RemoveItem. Interessant ist auch die Methode SizeToFitParent, mit der man eine Listbox maximieren kann; sie füllt dann die gesamte Containerfläche aus.

    Das IJoinLine-Objekt (Verbindungslinie) kennt nur fünf Eigenschaften, mit denen man festlegen kann, wie die Linie aussieht und welche Einträge in welche Listboxen sie verbindet.

    Programmierung des Controls

    In den nächsten Abschnitten erfahren Sie an einigen Beispielen, wie die Programmierung des ListView-Steuerelements funktioniert.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.