ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 20.07.2001

Diese Seite wurde zuletzt aktualisiert am 20.07.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicAddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zur AVB-Web-Site, Kontakt und Impressum

Zurück...

Dir-Historiker

Zurück...

(-hg) mailto:hg_keepdir@aboutvb.de

Das Zusammenspiel einer DriveListBox und einer DirListBox ist mit wenigen Zeilen im Handumdrehen programmiert. Im DriveChange-Ereignis bewirkt die Anweisung

Dir1.Path = Drive1.Drive

ohne weiteres Zutun, dass die DirListBox ebenfalls zum entsprechenden Laufwerk wechselt und... tja, leider immer nur das aktuelle Verzeichnis dieses Laufwerks anzeigt.

Die Klasse KeepDir hingegen merkt sich automatisch das jeweils zuletzt vom Anwender in der DirListBox gewählte und das markierte Verzeichnis eines Laufwerks. Kehr der Anwender nach einem Wechsel in ein anderes Laufwerk wieder zum dem einen Laufwerk zurück, restauriert KeepDir automatisch das zuletzt in diesem Laufwerk eingestellte Verzeichnis und die Position der Auswahl.

Sie brauchen lediglich eine Instanz der Klasse KeepDir anlegen und ihr die betreffende DriveListBox und DirListBox mit einem Aufruf der Init-Methode zu übergeben. Alles weitere erledigt die Klasse automatisch und informiert Sie über ihre eigenen Ereignisse DriveChange, DirChange und DirClick über Änderungen der Auswahl in den beiden Steuerelementen.

Wechselt der Anwender in der DriveListBox zu einem Laufwerk, das nicht bereit ist, wird das OnError-Ereignis ausgelöst. Im Parameter RestoreLastDrive wird zunächst True übergeben. Lassen Sie den Wert unverändert, setzt KeepDir sowohl die DriveListBox als auch die DirListBox automatisch auf den vorherigen Zustand zurück. Ändern Sie den Wert in False, müssen Sie selbst auf den Fehler (der im ersten Parameter des Ereignisses übergeben wird) reagieren - gegebenenfalls mit einer Meldung für den Anwender.

Public Event DirChange()
Public Event DirClick()
Public Event DriveChange()
Public Event OnError(ByVal ErrNumber As Long, _
 RestoreLastDrive As Boolean)

Private Enum EventConstants
  kEventNone = 0
  kEventDriveChange = 1
  kEventDirChange = 2
  kEventDirClick = 4
End Enum

Private WithEvents eDirListBox As DirListBox
Private WithEvents eDriveListBox As DriveListBox

Private mEvents As EventConstants
Private mKeepDirs As Collection
Private mLastDrive As String

Public Sub Init(DriveListBox As DriveListBox, _
 DirListBox As DirListBox)

  Set eDriveListBox = DriveListBox
  Set eDirListBox = DirListBox
  mLastDrive = Left$(eDriveListBox.Drive, 2)
  mKeepDirs.Add eDirListBox.Path, mLastDrive
End Sub

Private Sub Class_Initialize()
  Set mKeepDirs = New Collection
End Sub

Private Sub Class_Terminate()
  Set mKeepDirs = Nothing
  Set eDirListBox = Nothing
  Set eDriveListBox = Nothing
End Sub

Private Sub eDirListBox_Change()
  Dim nDrive As String
  
  With eDirListBox
    nDrive = Left$(.Path, 2)
    On Error Resume Next
    mKeepDirs.Remove nDrive
    On Error GoTo 0
    mKeepDirs.Add Array(.Path, .ListIndex), nDrive
    If mEvents Then
      mEvents = mEvents Or kEventDirChange
    Else
      RaiseEvent DirChange
    End If
  End With
End Sub

Private Sub eDirListBox_Click()
  Dim nDrive As String
  
  With eDirListBox
    nDrive = Left$(.Path, 2)
    On Error Resume Next
    mKeepDirs.Remove nDrive
    On Error GoTo 0
    mKeepDirs.Add Array(.Path, .ListIndex), nDrive
    If mEvents Then
      mEvents = mEvents Or kEventDirClick
    Else
      RaiseEvent DirClick
    End If
  End With
End Sub

Private Sub eDriveListBox_Change()
  Dim i As Integer
  Dim nErrNum As Long
  Dim nDrive As String
  Dim nRestoreLastDrive As Boolean
  Dim nRestore As Variant
  
  Static sInProc As Boolean
    
  If sInProc Then
    Exit Sub
  Else
    sInProc = True
  End If
  mEvents = kEventDriveChange
  nDrive = Left$(eDriveListBox.Drive, 2)
  On Error Resume Next
  nRestore = mKeepDirs(nDrive)
  With eDirListBox
    .Path = nRestore(0)
    If Err.Number Then
      Err.Clear
      .Path = nDrive
      If Err.Number Then
        nErrNum = Err.Number
        On Error GoTo 0
        nRestoreLastDrive = True
        RaiseEvent OnError(nErrNum, nRestoreLastDrive)
        If nRestoreLastDrive Then
          nDrive = mLastDrive
          eDriveListBox.Drive = nDrive
          mEvents = kEventNone
        End If
        sInProc = False
        Exit Sub
      End If
    Else
      .ListIndex = nRestore(1)
    End If
  End With
  mLastDrive = nDrive
  If (mEvents And kEventDriveChange) = kEventDriveChange Then
    RaiseEvent DriveChange
  End If
  If (mEvents And kEventDirChange) = kEventDirChange Then
    RaiseEvent DirChange
  End If
  If (mEvents And kEventDirClick) = kEventDirClick Then
    RaiseEvent DirClick
  End If
  mEvents = kEventNone
  sInProc = False
End Sub

Beispiel-Projekt und Klasse KeepDir (keepdir.zip - ca. 4 KB)



Komponenten-Übersicht

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2023 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...