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.03.2001

Diese Seite wurde zuletzt aktualisiert am 20.03.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns 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 zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Explorer-like navigieren

Zurück...


Anzeige

(-hg) mailto:hg_dirlistboxkeys@aboutvb.de

Mit den Cursortasten können Sie sich zwar in einer DirListBox bewegen, doch die Auswahl des Pfades ist per Tastatur nicht vorgesehen. Dabei wäre es doch für den Anwender ganz angenehm, könnte er wie etwa im Windows Explorer gewohnt mit den Nach-Rechts- und Nach-Links-Cursortasten durch die Ordnerstruktur navigieren und auch mit den Plus- und Minus-Tasten des Ziffernblocks der Tastatur Ordner öffnen und schließen.

So schwierig ist das gar nicht. Sie können im KeyDown-Ereignis der DirListBox wie bei jedem anderen Steuerelement auf die entsprechenden Tastatur-Codes ("KeyCode") reagieren. Der einzige kleine Stolperstein dürfte lediglich die im Vergleich zu einer normalen ListBox etwas eigenartige Verwaltung des ListIndex-Eigenschaft sein.

Das Prinzip ist einfach: Der Ordner, der dem gewählten Pfad entspricht (also als unterste Ebene geöffnet ist), hat den ListIndex -1. Alle darüber liegenden Ordner werden in negative Richtung weitergezählt. Die gegebenenfalls vorhandenen, aber noch nicht geöffneten Ordner unterhalb des gewählten Ordners werden mit 0 beginnend aufwärts gezählt. Die Eigenschaft ListCount gibt dementsprechend nur die Anzahl dieser Ordner wieder, nicht jedoch die Gesamtzahl aller Elemente der DirListBox bis hinauf zur Laufwerkswurzel.

Berücksichtigen Sie nun, dass die List-Eigenschaft zum jeweiligen ListIndex immer den kompletten Pfad des betreffenden Ordners liefert, und dass Sie den gewählten Pfad der DirListBox durch Zuweisung eines neuen Pfades ändern, können Sie nun jeweils entsprechend der Position des Auswahlbalkens der DirListBox einen aktuellen Pfad zuweisen. Schauen wir uns die einzelnen Tasten und deren Wirkung im einzelnen an. Wir haben hierzu die Hilfsprozedur DirListKeyDown in einem Standard-Modul angelegt, der Sie die betreffende DirListBox, und den vom KeyDown-Ereignis derselben gelieferten KeyCode und Shift-Status übergeben - zum Beispiel:

Private Sub Dir1_KeyDown(KeyCode As Integer, Shift As Integer)
  DirListKeyDown Dir1, KeyCode, Shift

Falls der Tastendruck nicht bereits in der Hilfsprozedur ausgewertet und verwendet (KeyCode = 0) worden ist, können Sie die Auswertung wie gewohnt folgen lassen

  Select Case KeyCode
    Case ...
      ...
  End Select
End Sub

Nun die Hilfsprozedur:

Public Sub DirListKeyDown(DirList As DirListBox, KeyCode As Integer, _
 Shift As Integer)

  Dim i As Integer
  Dim nOldPath As String

Damit Sie alle Tasten in Kombinationen mit den Umschalt-Tasten (Umschalt, Strg, Alt) weiterhin beliebig verwenden können, reagieren wir hier nur, wenn Shift gleich 0 ist:

  If Shift = 0 Then
    Select Case KeyCode
      Case vbKeyReturn

Wird die Eingabe-Taste oder die Plus-Taste des Ziffernblocks betätigt, und ist der ListIndex größer oder gleich 0 (der betreffende Ordner ist noch nicht geöffnet), setzen wir den Path auf den Wert der List-Eigenschaft und öffnen damit den Ordner:

        With DirList
          If .ListIndex >= 0 Then
            .Path = .List(.ListIndex)
          End If
        End With
        KeyCode = 0
      Case vbKeySubtract

Wird die Minus-Taste des Ziffernblocks betätigt, soll der betreffende Ordner geschlossen werden. Ist der markierte Ordner der gewählte Pfad, oder befindet sich die Auswahl oberhalb des geöffneten Pfad-Ordners, ist der ListIndex kleiner als 0 - der Ordner soll geschlossen werden. Dazu setzen wir den Pfad auf den Wert der List-Eigenschaft mit dem nächstkleineren ListIndex. Das reicht allerdings nicht ganz, denn die Markierung würde danach den nun gewählten Pfad-Ordner zeigen. Daher merken wir uns zuvor den alten Pfad, gehen die Liste der nun untergeordneten Ordner abwärts durch, bis wir den Listeneintrag mit dem alten Ordner-Pfad wiederfinden und setzen den ListIndex und damit die Markierung darauf:

        With DirList
          Select Case .ListIndex
            Case Is < 0
              nOldPath = .List(.ListIndex)
              .Path = .List(.ListIndex - 1)
              For i = 0 To .ListCount - 1
                If .List(i) = nOldPath Then
                  .ListIndex = i
                  Exit For
                End If
              Next 'i
          End Select
        End With
        KeyCode = 0
      Case vbKeyLeft

Im Window Explorer verhält sich die Nach-Links-Taste auf zweierlei Weise. Ist der markierte Ordner geöffnet, wird er geschlossen - der Code ist derselbe wie bereits gezeigt. Das betrifft den gewählten Pfad-Ordner als auch alle darüber liegenden (ja zwangsläufig geöffneten) Ordner.

        With DirList
          Select Case .ListIndex
            Case < 0
              nOldPath = .List(.ListIndex)
              .Path = .List(.ListIndex - 1)
              For i = 0 To .ListCount - 1
                If .List(i) = nOldPath Then
                  .ListIndex = i
                  Exit For
                End If
              Next 'i
            Case Else

Ist der ListIndex gleich oder größer 0, ist ein nicht geöffneter Ordner markiert. In diesem Fall wird lediglich die Markierung zum nächsten übergeordneten Ordner verschoben. In der DirListBox ist das ganz einfach der ListIndex -1:

              .ListIndex = -1
          End Select
        End With
        KeyCode = 0
      Case vbKeyRight
        With DirList
          Select Case .ListIndex
            Case Is < 0

Die Nach-Rechts-Taste zeigt im Windows Explorer auch zwei verschiedene Verhaltensweisen. Ist der Ordner der gewählte Pfad-Ordner oder ein darüber liegender Ordner, wird die Markierung auf den jeweils ersten untergeordneten Ordner verschoben. Das geht natürlich nur, wenn ein solcher vorhanden ist - den anderenfalls auftretenden fehler fangen wir einfach mit einem "On Error Resume Next" ab:

              On Error Resume Next
              .ListIndex = .ListIndex + 1
            Case Else

Ist der markierte Ordner nicht geöffnet (ListIndex 0 oder größer), wird er geöffnet - der gewählte Pfad auf diesen Ordner gesetzt:

              .Path = .List(.ListIndex)
          End Select
        End With
        KeyCode = 0
    End Select
  End If
End Sub

Modul modDirListBoxKeys (modDirListBoxKeys.bas - ca. 2,4 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

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

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer