Wer einmal mit dem ListView-Steuerelement gearbeitet hat und diesem Icons hinzufügen wollte, hat diese üblicherweise erst umständlich ins ImageList-Steuerelement eingefügt, um diese dann im ListView-Steuerelement anzeigen zu können. Dabei bietet Microsoft Access seit langem die Möglichkeit, Icons komfortabel in einer Tabelle namens MSysResources zu speichern. Die Icons lassen sich einfach durch Auswahl über die Eigenschaft Bild zu Bild-Steuerelementen oder Schaltflächen hinzufügen. In diesem Beitrag zeigen wir, wie wir die Bilder aus der Tabelle MSysResources einfach zu einem ImageList-Steuerelement addieren können, um diese dann im ListView-Steuerelement zu den einzelnen Einträgen hinzuzufügen.
Formular vorbereiten
Die ersten Schritte, um Icons in einem ListView-Steuerelement anzeigen zu können, sind das Hinzufügen eines ImageList– und eines ListView-Steuerelements zum Formular. Diese nennen wir in diesem Beispiel ctlImageList und ctlListView.
Icons hinzufügen auf die unkomfortable Art
Die eingangs beschriebene Technik ist für Einsteiger einfach zu realisieren. Wir öffnen die Eigenschaften des ImageList-Steuerelements, stellen dort die Größe für die hinzuzufügenden Icons ein und fügen dann auf der Seite Images die gewünschten Icons ein – nebst der Angabe der Eigenschaft Key, damit wir diese referenzieren können (siehe Bild 1).

Bild 1: Herkömmliches Hinzufügen von Icons zum ImageList-Control
Beim Hinzufügen sehen wir bereits den ersten Nachteil: Wir können hier zwar viele verschiedene Dateiformate verwenden, aber zum Beispiel PNG ist nicht darunter.
Und da viele Icons-Sammlungen ihre Icons in diesem Format liefern, ist das nicht besonders praktisch. Gut, dass unsere Lösung aus diesem Beitrag dies umgeht!
Der zweite Nachteil ist, dass wir immer, wenn wir einmal ein neues Icon hinzufügen wollen, das Formular in der Entwurfsansicht öffnen und die oben beschriebenen Schritte durchführen müssen. Also schauen wir uns einen alternativen, einfacheren Weg an.
Icons zur Tabelle MSysResources hinzufügen
Dieser sieht so aus, dass wir die Icons einfach zur Tabelle MSysResources hinzufügen. Diese Tabelle nimmt alle Icons auf, die wir zum Beispiel über den Formularentwurf einer Schaltfläche oder einem Bild-Steuerelement hinzufügen.
Hinweis: Um die Systemtabelle MSysResources zu sehen, müssen wir die Systemobjekte über die Optionen des Navigationsbereichs einblenden.
Dazu klicken wir im einfachsten Fall im Formularentwurf auf den Ribbon-Eintrag Formularentwurf|Steuerelemente|Bild einfügen und dann auf Durchsuchen. Hier wählen wir das gewünschte Icon aus und fügen es so hinzu.
Auch ohne das anschließende Einfügen des Bildes im Formularentwurf landet die Bilddatei in der Tabelle MSysResources. Die Bilddatei finden wir dort wie in Bild 2 in einem neuen Datensatz vor.

Bild 2: Die Tabelle MSysResources mit einer Icon-Datei
Auf diese Weise fügen wir noch einige weitere Icons zur Tabelle MSysResources hinzu. Allerdings stellen wir hier fest, dass es etwas mühselig ist, jedes Icon einzeln hinzuzufügen. Allerdings haben wir im Beitrag Icons in der Datenbank verwalten (www.access-im-unternehmen.de/1564) bereits eine Lösung zu diesem Problem veröffentlicht.
Damit lassen sich leicht mehrere Icons auf einen Rutsch zur Tabelle MSysResources hinzufügen.
Icon aus MSysResources zum ImageList-Control hinzufügen
Nun stellt sich jedoch die Frage, wie wir dieses Icon in das ImageList-Steuerelement bekommen, damit wir es im ListView-Steuerelement anzeigen können.
Die entscheidende Vorarbeit dazu haben wir bereits im Beitrag Icons in Ribbon, Kontextmenü, Formular und TreeView (www.access-im-unternehmen.de/1557) geleistet. Dort haben wir Funktionen definiert, mit denen wir einfach Bilder aus der Tabelle MSysResources in ein ImageList-Steuerelement einfügen können.
Aus der Beispieldatenbank zu diesem Beitrag haben wir die folgenden Objekte in die aktuelle Beispieldatenbank importiert:
- MDL_AMV_API
- MDL_AMV_Pictures
Aus letzterem Modul kommentieren wir noch die Funktion amvFileToResources aus, da sich diese in einem anderen Modul befindet – beide benötigen wir hier nicht.
Damit starten wir in die Programmierung. Wir benötigen zunächst eine Prozedur, die beim Laden des Formulars geöffnet wird und die Eigenschaften des ListView-Steuerelements einstellt sowie weitere Aktionen durchführt. Diese finden wir in Listing 1.
Private Sub Form_Load() Dim objListView As MSComctlLib.ListView Dim objImageList As MSComctlLib.ImageList Set objListView = Me.ctlListView.Object Set objImageList = Me.ctlImageList.Object objImageList.ImageHeight = 16 objImageList.ImageWidth = 16 Call ImageListFuellen With objListView .Appearance = ccFlat .BorderStyle = ccNone .Font.Name = "Calibri" .Font.Size = 11 .View = lvwReport .SmallIcons = Me.ctlImageList.Object .ColumnHeaders.Clear .ColumnHeaders.Add , "c1", "Icons" End With Call ImagesInListView End Sub
Listing 1: Prozedur, die beim Laden des Formulars ausgeführt wird
Sie deklariert Variablen für das ListView– und das ImageList-Steuerelement und füllt diese mit Verweisen auf die jeweilige Object-Eigenschaft.
Anschließend stellt sie die Größe der enthaltenen Icons auf eine Höhe und eine Breite von jeweils 16 Pixeln ein.
Dann ruft sie die Prozedur ImageListFuellen auf, welche die Icons in das ImageList-Steuerelement einliest – diese sehen wir uns weiter unten an.
Danach stellt sie die Eigenschaften des ListView-Steuerelements ein. Dazu gehört die flache Ansicht statt 3-D, das Entfernen des Rahmens, den wir durch den Rahmen des Steuerelements selbst im Formularentwurf ersetzen, die Einstellung der Schriftart und die Ansicht mit lvwReport.
Damit das ListView-Steuerelement weiß, woher es seine Icons beziehen soll, weisen wir der Eigenschaft SmallIcons einen Verweis auf die Object-Eigenschaft des ImageList-Steuerelements zu.
In der Ansicht lvwReport ist es wichtig, dass wir hier die Eigenschaft SmallIcons und nicht Icons verwenden. Wenn wir die Ansicht lvwIcon nutzen würden, käme hier die Eigenschaft Icons zum Einsatz.
Danach entfernen wir alle eventuell noch vorhandenen Spaltenüberschriften und fügen eine neue Spaltenüberschrift namens Icons hinzu.
Schließlich rufen wir die Prozedur ImagesInListView auf, welche die eigentlichen Einträge inklusive der Icons zum ListView-Steuerelement hinzufügt (siehe Listing 2).
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
