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

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/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 eine Bildverwaltung mit vielen Features für Access kennen.

Techniken

Bilder, GDI+, VBA, TreeView, ListView

Voraussetzungen

Access 2000 und höher

Beispieldateien

Notizverwaltung00.mdb, Notizverwaltung02.mdb, MSCOMCTL.msi

Notizverwaltung, Teil 2

André Minhorst, Duisburg

In der letzten Ausgabe hat Access im Unternehmen Ihnen die Notizverwaltung vorgestellt, die Ordnung ins Zettelchaos bringen kann: Ein übersichtliches TreeView-Steuerelement verschafft dabei einen Überblick über die in verschiedenen Kategorien gespeicherten Notizen. In dieser Ausgabe erhält die Notizverwaltung weitere Funktionen wie eine Möglichkeit zum Speichern von Dateiverweisen und eine Suchfunktion. Im nachfolgenden Text finden Sie Details zu den verwendeten Techniken.

Erweiterungen

Gegenüber der im ersten Teil dieser Beitragsreihe vorgestellten Version enthält die aktuelle Fassung zwei zusätzliche interessante Funktionen: Die erste bietet die Möglichkeit, zu jeder Notiz beliebig viele Verknüpfungen zu Dateien zu erstellen. Das Verzeichnis und der Dateiname der Dateien werden in einem ListView-Steuerelement unten rechts im Hauptfenster der Anwendung angezeigt (s. Abb. 1).

Der Clou ist, dass sich die Informationen zu den verknüpften Dateien durch einfaches Ziehen der Datei in das ListView-Steuerelement in der Tabelle tblDateien speichern lassen und anschließend im ListView angezeigt werden.

Die zweite Neuerung ist die Such-Funktion, die sich über die Schaltfläche Suche öffnen lässt. Die Suchfunktion befindet sich in einem eigenen Formular, das ein Textfeld zum Eingeben der Suchbegriffe enthält und die Ergebnisse in einer Liste anzeigt (s. Abb. 2). Es lassen sich einer oder mehrere Suchbegriffe in das Textfeld eingeben, die durch "und" oder "oder" verknüpft werden können.

Dateiverknüpfungen speichern

Hyperlinks lassen sich leicht in den Text einer Notiz einfügen, wieder herauskopieren und im Browser anzeigen. Bei Dateien ist das ein wenig schwieriger: Die lassen sich nicht so schnell öffnen, wenn nur der Pfad in der Notiz enthalten ist - und außerdem lassen sie sich nicht auf einfache Weise aus dem URL-Textfeld des Browsers in ein Access-Steuerelement ziehen. Mit Dateinamen funktioniert das schon: Deshalb beherbergt die Notizverwaltung in Zusammenhang mit der aktuellen Notiz stehende Dateien in einem ListView-Steuerelement, von dem aus die Dateien per Doppelklick mit der passenden Anwendung geöffnet werden können.

Damit das funktioniert, benötigen Sie die Funktionalität aus dem Beitrag Dateinamen per Drag and Drop (Shortlink 326). Dieser Beitrag stellt die Klasse CDragDrop vor, die unter anderem die beiden Methoden FileDropped und ManyFilesDropped enthält.

Abb. 1: Das Hauptformular der Notizverwaltung mit dem ListView zur Anzeige verknüpfter Dateien

Abb. 2: Die Suchfunktion liefert eine Liste aller Notizen mit den angegebenen Suchbegriffen.

Hinweis

Die in der Notizverwaltung verwendete Klasse CDragDrop unterscheidet sich unwesentlich von der im oben genannten Beitrag. Beachten Sie außerdem, dass die Klasse Subclassing einsetzt, was bei geöffnetem VBA-Editor zu Problemen führen kann. Im schlimmsten Fall lähmt die Datenbankanwendung das ganze System und es hilft nur das Abschießen über den Task-Manager, den Sie in dem Fall auch nur über die Tastenkombination Strg + Alt + Entf erreichen. Aber wie gesagt: Probleme gibt es nur bei geöffnetem VBA-Editor. Und den sollte der normale Benutzer eigentlich nicht zu Gesicht bekommen. (

Um die Methoden der Klasse in einem Formular einsetzen zu können, deklariert man die Klasse im Formularmodul etwa folgendermaßen:

Private WithEvents CDrag As CDragDrop

Die beiden Ereignisse werden ausgelöst, wenn der Benutzer eine oder mehrere Dateien auf ein bestimmtes Steuerelement im Formular zieht. Dazu müssen Sie dem passenden Objekt mitteilen, welches Steuerelement es beobachten soll. Im Falle des Formulars frmNotizen passiert dies in der Prozedur, die durch das Ereignis Beim Laden ausgelöst wird. Die folgenden Zeilen instanzieren das CDrag-Objekt, weisen ihm als Zielsteuerelement der Drag and Drop-Operationen das ListView-Steuerelement zur Anzeige der verknüpften Dateien zu und rufen die Methode SubClassHookForm auf, um das Formular zu "subclassen".

Set CDrag = New CDragDrop

CDrag.SubClassHook ctlListView.hwnd 

Interessant sind die beiden Ereignisprozeduren, die das Objekt CDrag bereitstellt, wenn es als WithEvents deklariert ist. Diese lassen sich leicht über die beiden Kombinationsfelder des VBA-Codefensters des Formularmoduls anlegen (s. Abb. 3).

Was passiert nun mit diesen Methoden? Man legt sie wie ganz normale Ereignisprozeduren an und fügt dort den Code ein, der beim Ziehen einer Datei auf das angegebene Steuerelement ausgelöst werden soll. Im vorliegenden Fall soll der Pfad in das Verzeichnis und den Dateinamen aufgeteilt und in der Tabelle tblDateien gespeichert werden (s. Abb. 4).

Jeder neue Datensatz enthält außerdem die ID der Notiz, mit dem die hinzugefügte Datei verknüpft ist. Außerdem soll das ListView-Steuerelement ctlListView die Dateiinformationen anzeigen (s. Abb. 5).

Abb. 3: Anlegen der Ereignisprozeduren des CDrag-Objekts

Abb. 4: Die Tabelle tblDateien speichert die Dateiinformationen und die ID der Notiz, mit der diese Datei verknüpft ist.

Abb. 5: Aus der Liste der mit einer Notiz verknüpften Dateien lässt sich eine Datei per Kontextmenü öffnen.

Dies alles erledigen die beiden Ereignisse FileDropped und ManyFilesDropped - je nachdem, ob der Benutzer eine oder mehrere Dateien ausgewählt und auf das ListView-Steuerelement gezogen hat. Quellcode 1 zeigt die Routine, die beim Ziehen einer einzelnen Datei auf die Liste ausgelöst wird (die Variante für mehrere Dateien sieht ähnlich aus).

Die Routine prüft zunächst, ob im TreeView-Steuerelement überhaupt gerade eine Notiz und nicht etwa eine Kategorie markiert ist.

Handelt es sich um eine Notiz, schreibt sie zunächst einen neuen Datensatz mit den entsprechenden Informationen in die Tabelle tblDateien und fügt dann einen Eintrag zum ListView-Steuerelement hinzu (Know-how zum ListView-Steuerelement finden Sie in den Beiträgen mit den Shortlinks 336, 337, 338 und 339).

Notizen
durchsuchen

Was hilft schon eine Datenbank zum Anlegen von Notizen, wenn man nicht per Volltextsuche darin suchen kann?

Also haben wir der Notizverwaltung auch noch eine Suchfunktion verpasst. Diese lässt sich über die Schaltfläche Suche im oberen Teil des Hauptformulars aktivieren und erwartet die Eingabe eines oder mehrerer mit "und" oder "oder" verknüpfter Suchbegriffe.

Die Schaltfläche zum Aufrufen des Suchformulars löst zunächst die folgende Anweisung aus und öffnet damit das Suchformular als modalen Dialog:

DoCmd.OpenForm "frmSuche", _
    WindowMode:=acDialog

Das Suchformular sieht im Entwurf wie in Abb. 6 aus. Das Textfeld txtSuchbegriffe erwartet die Eingabe der Suchbegriffe, während die Optionsgruppe ogrVerknuepfung zwei Optionen zur Auswahl der Verknüpfung der einzelnen Suchbegriffe enthält.

Zur Anzeige des Suchergebnisses dient schließlich ein ListView-Steuerelement namens ctlListView.

Quellcode 1: Diese Routine schreibt Informationen zu Dateien, die in das ListView-Steuerelement des Formulars gezogen wurden, in die Tabelle tblDateien und in das ListView-Steuerelement.

Private Sub CDrag_FileDropped(Filename As String)

    Dim objListItem As ListItem

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim lngID As Long

    Dim strDateiname As String

    Dim strVerzeichnis As String

    If Not IsNull(Me.NotizID) Then

        strDateiname = Mid(Filename, _
            InStrRev(Filename, "\") + 1)

        strVerzeichnis = Left(Filename, _
            InStrRev(Filename, "\"))

        Set db = CurrentDb

        Set rst = db.OpenRecordset("tblDateien", dbOpenDynaset)

        rst.AddNew

        rst!Dateiname = strDateiname

        rst!Verzeichnis = strVerzeichnis

        rst!NotizID = Me.NotizID

        lngID = rst!DateiID

        rst.Update

        Set objListItem = ctlListView.ListItems.Add _
            (, "a" & lngID, strDateiname)

        objListItem.ListSubItems.Add , , strVerzeichnis

        rst.Close

        Set rst = Nothing

        Set db = Nothing

    End If

End Sub

Ein Klick auf die Schaltfläche cmdSuchen ruft ebenso wie das Ereignis, das nach dem Aktualisieren des im Textfeld txtSuchbegriffe ausgelöst wird, die Routine SucheStarten auf (s. Quellcode 2):

Private Sub cmdSuchen_Click()

    SucheStarten

End Sub

Diese Routine ist in Quellcode 2 abgebildet. Sie prüft zunächst, ob das Textfeld txtSuchbegriff überhaupt einen Text enthält. Falls ja, teilt die Split-Funktion die enthaltene Zeichenkette in alle durch ein Leerzeichen getrennten Teile auf und speichert diese in einem String-Array namens strSuchbegriffe.

Die folgende For Next-Schleife iteriert über alle im Array enthaltenen Suchbegriffe, ergänzt jeden Suchbegriff zu einem Ausdruck wie Notiz LIKE '*<Suchbegriff>*', wobei es <Suchbegriff> durch den aktuellen Suchbegriff ersetzt und die einzelnen Bedingungen getrennt vom ausgewählten Verknüpfungsoperator aneinanderfügt.

Wenn das Textfeld txtSuchbegriffe etwa den Inhalt "Access Formular" hätte und die Suchbegriffe durch "und" verknüpft werden sollten, sähe der erzeugt Ausdruck folgendermaßen aus:

AND Notiz LIKE '*Access*' AND Notiz LIKE *Formular*'

Ohne das führende "AND" und zusammen mit dem in der Variablen strSQL gespeicherten Ausdruck SELECT * FROM tblNotizen WHERE ergibt dies die gewünschte SQL-Abfrage.

Die Routine durchläuft im Anschluss eine auf Basis des soeben ermittelten SQL-Ausdrucks erzeugte Datensatzgruppe - die ja alle Notizen mit dem gewünschten Inhalt enthält - und erledigt darin Folgendes:

  • Ermitteln des Kategoriepfades der Notiz (etwa /Access/Formular/Tipps und Tricks) mit der Funktion GetKategorien
  • Anlegen eines neuen Elements im ListView-Steuerelement
  • Fertig! Nach dem Durchlaufen aller Datensätze zeigt das ListView-Steuerelement alle gefundenen Notizen inklusive der übergeordneten Kategorien an.

    Quellcode 2: Die Suchfunktion des Formulars frmSuche

    Private Sub SucheStarten()

        'Deklaration aus Platzgründen nicht abgedruckt

        If Len(Nz(Me.txtSuchbegriffe, "")) > 0 Then

            Set db = CurrentDb

            strSuchbegriffe = Split(Me.txtSuchbegriffe, " ")

            If Me.ogrVerknuepfung = 1 Then

                strOperator = "AND"

            Else

                strOperator = "OR"

            End If

            strSQL = "SELECT * FROM tblNotizen WHERE "

            For i = 0 To UBound(strSuchbegriffe)

                strKriterium = strKriterium & " " & strOperator _
                    & " Notiz LIKE '*" & strSuchbegriffe(i) & "*'"

            Next i

            strKriterium = Mid(strKriterium, 5)

            strSQL = strSQL & strKriterium

            Set rst = db.OpenRecordset(strSQL)

            ctlListView.ListItems.Clear

            Do While Not rst.EOF

                strKategorie = GetKategorie(DLookup("KategorieID", _
                    "tblNotizen", "NotizID = " & rst!NotizID))

                Set objListItem = ctlListView.ListItems.Add(, "a" _
                     & rst!NotizID, rst!Bezeichnung)

                objListItem.ListSubItems.Add , , strKategorie

                rst.MoveNext

            Loop

            rst.Close

            Set rst = Nothing

            Set db = Nothing

        End If

    End Sub

    Abb. 6: Das Suchformular in der Entwurfsansicht

    Gefundene Notiz anzeigen

    Hat man in der Liste der Suchergebnisse den richtigen Eintrag gefunden, soll dieser natürlich leicht zugreifbar sein - am besten soll die passende Notiz nach einem Doppelklick auf diesen Eintrag im Hauptformular angezeigt werden.

    Dieser Wunsch kann erfüllt werden, wenn auch in zwei Schritten: Den ersten Schritt geht die Ereignisprozedur DblClick des ListView-Steuerelements. Sie ermittelt die ID des per Doppelklick ausgewählten Eintrags und stellt in der Tabelle tblNotizen den Wert des Feldes Aktiv für die ausgewählte Notiz auf True und macht das Suchformular unsichtbar.

    Auf diese Weise wird die Routine, die das Suchformular überhaupt erst geöffnet hat, fortgesetzt.

    Dabei überprüft diese, ob das Suchformular noch geöffnet ist (was darauf hindeutet, dass der Benutzer eine Notiz per Doppelklick ausgewählt hat, weil nur so das Formular den Fokus verliert, ohne geschlossen zu werden), aktualisiert daraufhin den Inhalt des TreeView-Steuerelements im Hauptformular und schließt das Suchformular endgültig.

    Dadurch, dass der Datensatz der ausgewählten Notiz in der Tabelle tblNotizen als aktiver Datensatz markiert wurde, wird die entsprechende Notiz nach dem Aktualisieren des TreeViews auch dort als aktuelle Notiz markiert und der passende Inhalt angezeigt:

    If IstFormularGeoeffnet("frmSuche") Then

        ctlTreeView.Nodes.Clear

        TreeViewFuellen

        DoCmd.Close acForm, "frmSuche"

    End If

    Komfort durch Kontextmenüs

    Besonders komfortabel wird die Anwendung durch den Einsatz von Kontextmenüs. Diese erlauben

  • das Hinzufügen von Kategorien und Notizen,
  • das Löschen von Kategorien und Notizen
  • und das Hinzufügen, Löschen und Öffnen von Dateiverknüpfungen.
  • Nur ihre Programmierung ist nicht so einfach - zumindest nicht, wenn die Kontextmenüs in Zusammenhang mit bestimmten Elementen von TreeViews- oder Listview aus aufgerufen werden sollen. Die folgenden Abschnitte bringen Licht ins Dunkel.

    Kontextmenü anlegen

    Am einfachsten legen Sie das benötigte Kontextmenü in den folgenden Schritten an:

  • Wählen Sie den Eintrag Anpassen des Kontextmenüs der Menüleiste von Access aus.
  • Zeigen Sie das Menü Kontextmenü aus der Liste Symbolleisten im nun erscheinenden Anpassen-Dialog an.
  • Es erscheint die Symbolleiste Kontextmenü. Wechseln Sie im Anpassen-Dialog auf die Registerseite Befehle, wählen Sie im linken Listenfeld den Eintrag Neues Menü aus und ziehen Sie den in der rechten Liste erscheinenden Eintrag gleichen Namens in den Menüpunkt Benutzerdefiniert der Kontextmenü-Leiste.
  • Geben Sie dem neuen Kontextmenü einen sinnvollen Namen.
  • Wechseln Sie in der linken Liste des Anpassen-Dialogs zum ersten Eintrag Datei und ziehen Sie den Eintrag Benutzerdefiniert aus dem rechten Listenfeld auf das neu angelegte Kontextmenü.
  • Geben Sie auch dem Menüeintrag einen Namen und aktivieren Sie gegebenenfalls die Option Schaltflächensymbol und Text im Kontextmenü des neuen Eintrags, wenn Sie zusätzlich zum Text ein Symbol anzeigen möchten. (
  • Merken Sie sich die für die Kontextmenüs und die einzelnen Menüpunkte vergebenen Namen, wenn Sie diese Informationen während der folgenden Programmierschritte nicht jedes Mal mühsam ermitteln möchten.

    Benutzerdefinierte Icons

    Die Notizverwaltung verwendet in den Kontextmenüs benutzerdefinierte Symbole. Diese werden den Symbolleisten per VBA-Code in der Beim Laden-Ereignisprozedur des jeweiligen Formulars zugewiesen.

    Für den Menüpunkt zum Öffnen einer der mit einer Notiz verknüpften Datei sehen die notwendigen Anweisungen wie folgt aus.

    Dabei ist Dateien_Datei der Name des Kontextmenüs und Datei öffnen der Name des Menüeintrags und die Bilder stammen aus dem im Formular enthaltenen ImageList-Steuerelement:

    Set cbr = CommandBars("Dateien_Datei")

    Set cbc = cbr.Controls("Datei öffnen")

    With cbc

      .Picture = _
        ctlImageList.ListImages(17).Picture

      .Mask = _
        ctlImageList.ListImages(18).Picture

    End With

    Weitere Informationen zum Zuweisen benutzerdefinierter Icons zu Menüs finden Sie im Beitrag Symbolleiste mit benutzerdefinierten Icons (Shortlink 324).

    Das Zuweisen benutzerdefinierter Icons ist leider erst ab Access 2002 möglich, daher fehlt diese Funktionalität in der Version für Access 2000.

    Kontextmenüs im wahrsten Sinne des Wortes

    Üblicherweise kann man Kontextmenüs einzelnen Formularen oder Steuerelementen zuweisen. Dafür gibt es dann eine entsprechende Eigenschaft, in die man einfach den Namen der Kontextmenüleiste einträgt.

    Im vorliegenden Fall ist die Situation etwas vertrackter: Die Kontextmenüs sollen nicht nur vom Steuerelement abhängen, sondern auch noch von dem Element, über dem sich der Mauszeiger zum Zeitpunkt des Klicks auf die rechte Maustaste befindet.

    Die nachfolgende Beschreibung funktioniert für TreeView- und ListView-Steuerelemente, weil diese die hier verwendete HitTest-Methode aufweisen. Diese kann in Ereignisprozeduren von TreeView- und ListView-Steuerelementen eingesetzt werden, die die aktuellen Koordinaten des Mauszeigers in Form einer x- und einer y-Koordinate zur Verfügung stellen. Die HitTest-Methode liefert dann das zu den Koordinaten passende Objekt zurück - je nach Steuerelement ein Node- oder ein ListItem-Objekt.

    Wer schon einmal benutzerdefinierte Menüs angelegt hat, weiß auch, dass man die durch den jeweiligen Menüpunkt ausgelöste Funktion über die Eigenschaften des Menüpunkts angeben kann. Das funktioniert hier nicht - zumindest nicht, wenn die Funktion vom aktuell ausgewählten Element abhängt:

    Wie also weist man den Einträgen des Kontextmenüs Funktionen zu, die vom aktuell markierten Element des zugrunde liegenden Steuerelements abhängen - TreeView und ListView bieten ja noch nicht einmal irgendeine Eigenschaft zum Eintragen eines Kontextmenüs?

    Ganz klar: Hier ist VBA gefragt. Die fraglichen Steuerelemente bieten beispielsweise das Ereignis MouseUp. Dieses wird beim Loslassen einer Maustaste ausgelöst - ideal zum Anzeigen eines Kontextmenüs.

    Die Parameter der Ereignisprozedur bringen alles mit, was Sie benötigen:

    Private Sub ctlTreeView_MouseUp( _
        ByVal Button As Integer, _
        ByVal Shift As Integer, _
        ByVal x As Long, ByVal y As Long)

        '...

    End Sub

    Button liefert den Wert 1 für die linke und den Wert 2 für die rechte Maustaste, Shift den Wert 2 bei gedrückter Umschalttaste, 0 für die blanke rechte Maustaste) und x und y die aktuellen Koordinaten des Mauszeigers.

    Mit den Koordinaten lässt sich wiederum - wie bereits erwähnt - das aktuell markierte Element ermitteln.

    Das Kontextmenü für das ListView zur Anzeige der verknüpften Dateien ist etwas weniger komplex wie das des TreeViews, deshalb schauen Sie sich dieses zunächst einmal an (wenn Sie die Funktionalität verstanden haben, kommen Sie auch mit den Kontextmenüs des TreeViews zurecht).

    Die Routine aus Quellcode 4 prüft zunächst, ob der Mausklick über die rechte Maustaste erfolgt, und dann, ob sich der Mauszeiger beim Klick über einem der Elemente befindet. Falls ja, ermittelt sie die ID dieses Elementes in der Tabelle tblDateien - dies erfolgt durch Parsen der Key-Eigenschaft des Elements.

    Je nachdem, ob der Klick auf einem Element oder im freien Bereich erfolgte, startet die Routine anschließend eine der folgenden beiden Aktionen: Entweder man hat ein Element getroffen, dann referenziert die Routine das Kontextmenü Dateien_Datei und legt für die beiden Schaltflächen dieses Menüs vom aktuellen Element abhängige Funktionsaufrufe fest.

    Für den Eintrag zum Öffnen der Datei sieht dies wie folgt aus (in einer Zeile):

    cbr.Controls("&Datei entfernen").OnAction = "=mnuDateiEntfernen(" & lngID & ")"

    Klickt man mit der rechten Maustaste in einen leeren Bereich des ListViews, wird das Kontextmenü Dateien_Leer referenziert: Dieses enthält nur die Schaltfläche Datei hinzufügen.

    Auch hier ist ein dynamisch zusammengesetzter Aufruf der entsprechenden Menüfunktion erforderlich: Immerhin muss der neue Eintrag, dessen Pfad über eine Input-Box abgefragt wird, einer bestimmten Notiz zugeordnet werden.

    Quellcode 4: Steuerung der Kontextmenüs im ListView zur Anzeige der mit einer Notiz verknüpften Dateien

    Private Sub ctlListView_MouseUp(ByVal Button As Integer, _
        ByVal Shift As Integer, ByVal x As Long, ByVal y As Long)

        On Error GoTo ctlListView_MouseUp_Err

        Dim cbr As CommandBar

        Dim objListItem As ListItem

        Dim lngID As Long

        Select Case Button

            Case 2

                On Error Resume Next

                If Not ctlListView.HitTest(x, y) Is Nothing Then

                    Set objListItem = ctlListView.HitTest(x, y)

                End If

                lngID = Mid(objListItem.Key, 2)

                Err.Clear

                On Error GoTo ctlListView_MouseUp_Err

                If objListItem Is Nothing Then

                    Set cbr = CommandBars("Dateien_Leer")

                    cbr.Controls("&Datei hinzufügen").OnAction = _
                        "=mnuDateiHinzufuegen(" & Me.NotizID & ")"

                Else

                    objListItem.Selected = True

                    Set cbr = CommandBars("Dateien_Datei")

                    cbr.Controls("&Datei entfernen").OnAction = _
                        "=mnuDateiEntfernen(" & lngID & ")"

                    cbr.Controls("Datei &öffnen").OnAction = _
                        "=mnuDateiOeffnen(" & lngID & ")"

                End If

        End Select

        If Not cbr Is Nothing Then

            cbr.ShowPopup

        End If

       'Fehlerbehandlung aus Platzgründen nicht abgedruckt

    End Sub

    Quellcode 5: Entfernen einer Datei aus dem ListView und aus der zugrunde liegenden Tabelle

    Public Function mnuDateiEntfernen(lngDateiID As Long)

        Forms!frmNotizen!ctlListView.ListItems.Remove "a" _
            & lngDateiID

        CurrentDb.Execute _
            "DELETE FROM tblDateien WHERE DateiID = " & lngDateiID

    End Function

    Zu diesem Zeitpunkt verweist die Objektvariable cbr auf eines der beiden beschriebenen Kontextmenüs, das nur noch angezeigt werden muss: Dafür sorgt schließlich die Anweisung cbr.ShowPopup.

    Nun fehlen nur noch die passenden Funktionen, die von den Kontextmenüs aufgerufen werden. Diese speichern Sie als Public-Funktionen in einem Standardmodul, damit sie öffentlich zugänglich sind. Beispielhaft soll die Funktion zum Entfernen einer Datei aus der Liste vorgestellt werden (s. Quellcode 5).

    Diese erledigt zwei Dinge: Ersten entfernt sie das zu der Datei gehörende Element aus dem ListView-Steuerelement und zweitens löscht sie den entsprechenden Eintrag aus der Tabelle tblDateien.

    Zusammenfassung und Ausblick

    Die Notizverwaltung ist ein gutes Beispiel dafür, wie man die seit Office 2002 zum Paket gehörenden Steuerelemente wie das TreeView, das ListView und die ImageList mit ein wenig Know-how zum Erzeugen beeindruckender Benutzeroberflächen einsetzen kann.

    Die beiden (recht kurzen) Teile dieser Beitragsreihe können leider nicht annähernd alle verwendeten Techniken umfassend beschreiben, aber die weiteren Beiträge zu TreeView, ListView und Co. liefern das fehlende Know-how.

    Die Notizverwaltung selbst hilft Ihnen hoffentlich, eine eventuell vorhandene Zettelwirtschaft einzudämmen und liefert vor allem mit der Suche eine Funktion, die die bestsortierte Ablage nicht bieten kann.

    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:

    Download

    Download

    Die .zip-Datei enthält folgende Dateien:

    Notizverwaltung.mdb

    MSCOMCTL.msi

    Beispieldateien downloaden

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.