vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB4, VB5, VB627.11.01
Eigene "zuletzt geöffnete Dateiliste" realisieren

Ab sofort können auch Sie Ihre Anwendung mit einer "RecentFiles"-Liste austatten, welche die x zuletzt geöffneten Dateien anzeigt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  25.702 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

MS-Word zeigt sie, Visual Basic zeigt sie und viele anderen Anwendungen auch - eine Liste der zuletzt geöffneten Dateien, und zwar im Menü Datei. Hier werden z.B. immer die vier zuletzt geöffneten Dateien aufgelistet, um so einen schnellen Zugriff auf die letzten Dateien zu bieten.

Auch in der eigenen Anwendung kann eine solche "RecentFiles"-Liste sinnvoll sein, z.B. wenn Sie einen kleinen Texteditor programmiert haben.

Was muss man beachten, wie und wo werden die Dateinamen gespeichert? All das erfahren Sie in unserem heutigen Tipp.

Vorbereitung des Formulars
Öffnen Sie den Menüeditor der Form, in der Sie im Menü die letzten x-Dateien zum schnellen Abruf bereitstellen wollen. Fügen Sie an geeigneter Stelle (am besten ganz zum Schluss, jedoch noch vor dem "Beenden"-Befehl) 4 neue Menüeinträge ein:

  1. Name = mnuRecent, Index = 1
  2. Name = mnuRecent, Index = 2
  3. Name = mnuRecent, Index = 3
  4. Name = mnuRecent, Index = 4

Die Liste der letzten Dateien lässt sich in einer Text-Datei, in INI-Files oder auch in der Registry speichern. Wir entscheiden uns für die Registry. Hierfür stellt uns Visual Basic bereits die notwendigen Funktionen zum Speichern und Auslesen zur Verfügung: SaveSetting und GetSetting

Nachdem nun das Formular vorbereitet ist und auch klar ist, wie und wo wir die "RecentFiles"-Liste speichern, kann es ans Codieren gehen.

Im Allgemein-Teil der Form legen wir zunächst den Abschnitt der Registry fest, sowie die Anzahl der Dateien, die wir uns "merken" wollen.

Option Explicit
' Abschnitt in der Registry festlegen
' (hier werden die Dateinamen gespeichert)
Const RegAppName = "MyApplication"
Const RegAppSection = "RecentFiles"
 
' maximale Anzahl der Dateinamen, die "gemerkt"
' werden sollen
Const intMaxFiles = 4

Im Form_Load Ereignis wird das Menü Datei entsprechend aktualisiert, so dass sofort die zuletzt geöffneten Dateien angezeigt werden. Hierbei möchten wir aber nicht den vollständigen Pfad, sondern nur den reinen Dateinamen ausgeben:

Private Sub Form_Load()
  ' Menü Datei aktualisieren
  SetMenuRecentFiles
End Sub
 
Private Sub SetMenuRecentFiles()
  ' Liste der zuletzt geöffneten Dateien im Menü
  ' Datei anzeigen
 
  Dim I As Integer
  Dim intCount As Integer
  Dim strFilename As String
 
  For I = 1 To intMaxFiles
    ' Dateiname aus Registry lesen
    strFilename = GetSetting(RegAppName, RegAppSection, _
      CStr(I), "")
 
    ' Jetzt im Menü anzeigen
    If strFilename <> "" Then
      mnuRecent(I).Caption = "&" & CStr(I) & " " & _
        Mid$(strFilename, InStrRev(strFilename, "\") + 1)
      mnuRecent(I).Tag = strFilename
      mnuRecent(I).Visible = True
    Else
      mnuRecent(I).Visible = False
    End If
  Next I
End Function

Wenn Sie den Code der Prozedur SetMenuRecentFiles genauer anschauen, stellen Sie fest, dass der vollständige Dateiname der Dateien in der Tag-Eigenschaft der Menü-Einträge gespeichert wird. Ja, auch Menüs haben eine Tag-Eigenschaft

Private Sub mnuRecent_Click(Index As Integer)
  ' Datei öffnen
  MsgBox "Datei öffnen:" & vbCrLf & mnuRecent(Index).Tag
End Sub

Fehlt jetzt eigentlich nur noch der Teil, in welchem die Dateien in die Registry gespeichert werden. Hierzu erstellen wir eine Prozedur, welche Sie jedesmal dann aufrufen, wenn eine neue Datei geöffnet wurde.

Private Sub AddToRecentList(ByVal strFilename As String)
  ' Eintrag der Liste der zuletzt geöffneten
  ' Dokumenten hinzufügen
 
  Dim I As Integer
  ReDim arrFiles(intMaxFiles) As String
 
  ' Einträge um eine Position versetzt einlesen
  For I = intMaxFiles - 1 To 1 Step -1
    arrFiles(I + 1) = GetSetting(RegAppName, _
      RegAppSection, CStr(I), "")
  Next I
 
  ' Erster Eintrag = zuletzt geöffnetes Dokument
  arrFiles(1) = strFilename
 
  ' Alle Einträge wieder speichern
  For I = 1 To intMaxFiles
    SaveSetting RegAppName, RegAppSection, _
      CStr(I), arrFiles(I)
  Next I
End Sub

Wie gesagt, wird eine neue Datei geöffnet, muss die AddToRecentList-Prozedur aufgerufen werden:

Private Sub cmdOpen_Click()
  ' Datei öffnen
  On Local Error Resume Next
  With CommonDialog1
    .CancelError = True
    .ShowOpen
    If Err = 0 Then
      ' Datei der Liste hinzufügen
      AddToRecentList .FileName
 
      ' "Datei"-Menü aktualisieren
      SetMenuRecentFiles
    End If
  End With
End Sub

Das war's dann auch schon.
Ab sofort bietet auch Ihre Anwendung eine "RecentFiles"-Liste
 

Dieser Tipp wurde bereits 25.702 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel