Dateisystem-Steuerelemente
DirectoryListBox, DriveListBox und FileListBox

Viele Anwendungen müssen Informationen über Laufwerke, Verzeichnisse und Dateien anzeigen. Um Benutzern die Arbeit mit dem Dateisystem zu ermöglichen, stellt Visual Basic zwei Alternativen zur Verfügung. Sie können die vom Standarddialog-Steuerelement (CommonDialog) zur Verfügung gestellten Standarddialogfelder verwenden, oder Sie können eigene Dialogfelder aus einer Kombination drei spezieller Steuerelemente verwenden: das Laufwerklistenfeld (DriveListBox), Verzeichnislistenfeld (DirectoryListBox) und Dateilistenfeld (FileListBox).

Mit den Dateisystem-Steuerelementen können Sie Benutzern das Suchen und Auswählen von Dateien in Ihren Anwendungen ermöglichen. Sie sollten das Standarddialog-Steuerelement verwenden, wenn Sie lediglich ein Standarddialogfeld zum Öffnen, Speichern und Drucken von Dateien benötigen.

Jedes Steuerelement führt seine Aufgabe (Einlesen und Anzeigen der Elemente des Dateisystems) automatisch aus. Dateisystem-Steuerelemente erhalten alle angezeigten Informationen automatisch vom Betriebssystem.

Sie können die Dateisystem-Steuerelemente einzeln verwenden oder miteinander kombinieren. Beim Kombinieren können Sie die Art der gegenseitigen Wechselwirkungen programmieren, indem Sie in die Ereignisprozedur jedes Steuerelements den entsprechenden Code implementieren. Die Steuerelemente funktionieren aber auch unabhängig voneinander.

    Das Laufwerklistenfeld

Das Laufwerklistenfeld ist ein Dropdown-Listenfeld. Standardmäßig zeigt es das aktuelle Laufwerk im System des Benutzers an. Wenn dieses Steuerelement den Fokus hat, kann der Benutzer jede gültige Laufwerksbezeichnung eingeben oder auf den Pfeil rechts neben dem Laufwerklistenfeld klicken. Wenn der Benutzer auf den Pfeil klickt, wird das Listenfeld geöffnet und zeigt eine Liste aller gültigen Laufwerke an. Der Benutzer kann aus dieser Liste ein neues aktuelles Laufwerk auswählen, das dann oben im Listenfeld angezeigt wird.

Sie können mit Hilfe von Code die Drive-Eigenschaft des Laufwerklistenfelds untersuchen, um festzustellen, welches Laufwerk zur Zeit ausgewählt ist. Sie können auch einfach mit folgender Anweisung angeben, welches Laufwerk oben im Listenfeld angezeigt wird:

Drive1.Drive = "c:\"

Das Laufwerklistenfeld zeigt die gültigen verfügbaren Laufwerke an. Durch die Auswahl eines Laufwerks aus dem Listenfeld wird das aktuelle Arbeitslaufwerk nicht automatisch geändert. Sie können jedoch mit Hilfe der Drive-Eigenschaft das aktuelle Laufwerk auf der Betriebssystemebene ändern, indem Sie die Eigenschaft als Argument in der ChDrive-Anweisung angeben:

ChDrive Drive1.Drive

    Das Verzeichnislistenfeld

Das Verzeichnislistenfeld zeigt die Verzeichnisstruktur des aktuellen Laufwerks im System des Benutzers an, beginnend mit dem Stammverzeichnis. Das aktuelle Verzeichnis wird zu Beginn hervorgehoben und gegenüber den Verzeichnissen eingerückt, die sich in der Hierarchie darüber befinden. Die Unterverzeichnisse erscheinen im Verzeichnislistenfeld wiederum eingerückt darunter. Wenn der Benutzer in der Liste nach oben oder nach unten geht, werden alle Elemente der Liste in der entsprechenden Richtung nacheinander hervorgehoben.

Kennzeichnen einzelner Verzeichnisse

Jedem Verzeichnis im Listenfeld ist ein ganzzahliger Bezeichner ListIndex zugeordnet, der das Verzeichnis kennzeichnet. Das in der Path-Eigenschaft angegebene Verzeichnis (Dir1.Path) hat immer den ListIndex-Wert -1. Das Verzeichnis unmittelbar darüber hat den ListIndex-Wert -, das Verzeichnis darüber den Wert -3 usw., bis hin zum Stammverzeichnis. Das erste Unterverzeichnis von Dir1.Path hat den ListIndex-Wert 0. Wenn sich mehrere Verzeichnisse auf der ersten Unterverzeichnisebene befinden, haben diese die ListIndex-Werte 1, 2 usw..

Festlegen des aktuellen Verzeichnisses

Mit der Path-Eigenschaft des Verzeichnislistenfelds können Sie das aktuelle Verzeichnis im Listenfeld festlegen oder zurückgeben (ListIndex = -1). Wenn Sie beispielsweise Dir1.Path das Verzeichnis "c:\gehalt" zuweisen, wird das Verzeichnis \Gehalt als aktuelles Arbeitsverzeichnis ausgewählt.

Genauso können Sie der Path-Eigenschaft des Verzeichnislistenfelds die Drive-Eigenschaft des Laufwerklistenfelds zuweisen:

Dir1.Path = Drive1.Drive

Nachdem diese Zuweisung ausgeführt wurde, zeigt das Verzeichnislistenfeld alle verfügbaren Verzeichnisse und Unterverzeichnisse dieses Laufwerks an. Standardmäßig zeigt das Verzeichnislistenfeld auch alle Verzeichnisse oberhalb und unmittelbar unterhalb des aktuellen Verzeichnisses eines Laufwerks an, das der Eigenschaft Dir1.Path zugewiesen wurde. Das Verzeichnislistenfeld wechselt das aktuelle Verzeichnis nicht auf Betriebs­systemebene, sondern hebt das Verzeichnis nur hervor und gibt ihm den ListIndex-Wert -1.

Mit der ChDir-Anweisung legen Sie das aktuelle Arbeitsverzeichnis auf Betriebssystemebene fest. Mit der folgenden Anweisung wird z.B. in das Verzeichnis gewechselt, das im Verzeichnislistenfeld angezeigt wird:

ChDir Dir1.Path

In einem Anwendungsprogramm, das Dateisystem-Steuerelemente verwendet, können Sie zum Beispiel als aktuelles Verzeichnis das Verzeichnis festlegen, in dem sich die ausführbare Datei (.exe) der Anwendung befindet, indem Sie das Application-Objekt verwenden:

ChDrive App.Path      ' Laufwerk festlegen.

ChDir App.Path        ' Verzeichnis festlegen.

Anmerkung   Die Path-Eigenschaft steht nicht zur Entwurfszeit, sondern nur zur Laufzeit zur Verfügung.

Klicken und Doppelklicken auf ein Verzeichniselement

Wenn ein Benutzer auf eine Datei in einem Verzeichnislistenfeld klickt, wird dieses Element hervorgehoben. Wenn er auf ein Element doppelklickt, wird dieses Element der Path-Eigenschaft zugewiesen, die zugehörige ListIndex-Eigenschaft erhält den Wert -1, und das Verzeichnislistenfeld wird neu dargestellt, um die direkten Unterverzeich­nisse anzuzeigen.

Bestimmen der relativen Position eines Verzeichnisses

Die ListCount-Eigenschaft gibt die Anzahl der Verzeichnisse unterhalb des aktuell eingeblendeten Verzeichnisses und nicht die Gesamtzahl der Elemente im Verzeichnislistenfeld zurück. Da der ListIndex-Wert des derzeit eingeblendeten Verzeichnisses immer -1 ist, können Sie Code schreiben, der die Ebene des aktuellen Verzeichnisses in der Hierarchie (ab dem Stammverzeichnis) berechnet. Ein Beispiel:

GoHigher = 0 

Do Until Dir1.List(GoHigher) = ""     ' Dir1.List(x) ist leer, wenn Verzeichnis nicht existiert.

   GoHigher = GoHigher - 1

Loop

LevelsAbove = Abs(GoHigher)       ' In positive Zahl umwandeln.

    Das Dateilistenfeld

Das Dateilistenfeld zeigt die Dateien an, die sich in dem Verzeichnis befinden, das in der Path-Eigenschaft zur Laufzeit festgelegt wurde. Sie können sämtliche Dateien im aktuellen Verzeichnis auf dem aktuellen Laufwerk mit der folgenden Anweisung anzeigen:          File1.Path = Dir1.Path

Sie können auch nur einen Teil dieser Dateien anzeigen, indem Sie die Pattern-Eigenschaft festlegen. Das Schema *.frm zeigt beispielsweise nur Dateien mit der Erweiterung .frm an. Die Pattern-Eigenschaft kann auch eine durch Semikolons getrennte Liste enthalten. Die folgende Code-Zeile zeigt z.B. alle Dateien mit den Erweiterungen .FRM und .BAS an:       File1.Pattern = "*.frm;*.bas"

Visual Basic unterstützt das Platzhalterzeichen ?. Mit "???.txt" werden beispielsweise Dateien angezeigt, die einen aus drei Zeichen bestehenden Dateinamen und die Erweiterung .txt haben.

Arbeiten mit Dateiattributen

Die Attribute der derzeit ausgewählten Datei (Archive, Normal, System, Hidden und ReadOnly) können mit den Eigenschaften des Dateilistenfeldes ebenfalls abgerufen werden. Mit diesen Eigenschaften geben Sie an, welche Art von Dateien in einem Dateilistenfeld angezeigt werden sollen. Der Standardwert für die Attribute System und Hidden ist False. Der Standardwert für die Attribute Normal, Archive und ReadOnly lautet True.

Wenn beispielsweise nur schreibgeschützte Dateien in dem Listenfeld angezeigt werden sollen, setzen Sie einfach die ReadOnly-Eigenschaft auf True und die anderen Attributeigenschaften auf False:

File1.ReadOnly = True                  File1.System = False

File1.Archive = False                    File1.Hidden = False

File1.Normal = False                  

Wenn Normal dem Wert True hat, werden die Dateien mit Ausnahme von System­dateien oder versteckten Dateien angezeigt. Wenn Normal den Wert False hat, können Sie immer noch schreibgeschützte und/oder Archivdateien anzeigen, indem Sie die entsprechenden Attribute auf True setzen.

Anmerkung   Sie können mit den Attributeigenschaften die Attribute einer Datei nicht verändern. Legen Sie Dateiattribute mit Hilfe der SetAttr-Anweisung fest.

Auswählen von Dateien im Dateilistenfeld

Zur Laufzeit geben die Filename-Eigenschaft oder die List(ListIndex)-Eigenschaft den Namen der ausgewählten Datei zurück, wenn der Benutzer eine Datei angeklickt hat.

Die ListCount-Eigenschaft gibt die Anzahl der angezeigten Dateien im Dateilistenfeld zurück.

Die ListIndex-Eigenschaft gibt die Nummer der im Dateilistenfeld ausgewählten Datei zurück (0 bis ListCount-1)

Standardmäßig kann nur eine Datei in einem Dateilistenfeld hervorgehoben werden. Mit der MultiSelect-Eigenschaft können Sie dem Benutzer die gleichzeitige Auswahl mehrerer Dateien ermöglichen.

Die Selected-Eigenschaft gibt Auskunft, ob eine Datei gewählt wurde (siehe unter ListBox und ComboBox).

    Kombinieren der Dateisystem-Steuerelemente

Wenn Sie eine Kombination von Dateisystem-Steuerelementen verwenden, können Sie die angezeigten Informationen synchronisieren. Wenn Sie beispielsweise ein Laufwerklistenfeld, ein Verzeichnislistenfeld und ein Dateilistenfeld mit den Standardnamen Drive1, Dir1 und File1 eingerichtet haben, könnten die Ereignisse in der folgenden Reihenfolge eintreten:

1.    Der Benutzer wählt ein Laufwerk aus dem Listenfeld Drive1.

2.    Es tritt ein Drive1_Change-Ereignis ein, und die Anzeige in Drive1 wird aktualisiert, um das neue Laufwerk anzuzeigen.

3.    Der Code in der Drive1_Change-Ereignisprozedur weist der Path-Eigenschaft des Listenfelds Dir1 die neue Auswahl (die Drive1.Drive-Eigenschaft) mit den folgenden Anweisungen zu:

Private Sub Drive1_Change ()

   Dir1.Path = Drive1.Drive

End Sub

4.    Die Zuweisung zur Path-Eigenschaft löst ein Dir1_Change-Ereignis aus und aktualisiert die Anzeige in Dir1, um das aktuelle Verzeichnis des neuen Laufwerks anzuzeigen.

5.    Der Code in der Dir1_Change-Ereignisprozedur weist den neuen Pfad (die Dir1.Path-Eigenschaft) der File1.Path-Eigenschaft des Listenfelds File1 zu:

Private Sub Dir1_Change ()

   File1.Path = Dir1.Path

End Sub

Durch die Zuweisung zur File1.Path-Eigenschaft wird im Listenfeld File1 die Pfadangabe von Dir1 angezeigt.